MICPRG Les 12 Microcontroller Programmeren in C. 127 Real-time clock PC heeft een RTC Real-time Clock die de “time of day” bijhoudt. De RTC is voorzien.

Slides:



Advertisements
Verwante presentaties

Advertisements

PROS2 Les 13 Programmeren en Software Engineering 2.
Objectgeoriënteerd Programmeren in C++



Embedded systemen Embedded software.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Algoritmen en Datastructuren (ALDAT)
PROS2 Les 9 Programmeren en Software Engineering 2.
Microcontroller Programmeren in C

PROS2 Les 12 Programmeren en Software Engineering 2.
HCC PC gebruikersgroep: Practical Electronics, Maarssenbroek I2CI2CI2CI2C Wat kun je ermee?

Arduino project.
Gestructureerd programmeren in C
PROS2 Les 11 Programmeren en Software Engineering 2.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Enumerate typedef struct union functiepointers 1.
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.
Conditionele expressie



Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Frank Stalpers en Ad Baars
Numerieke Natuurkunde
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)

GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
MICPRG Les 14 Microcontroller Programmeren in C. 153 Duurzaam AVR gebruik De AVR ATmega32A is de opvolger van de ATmega32. De A versie is ongeveer 40%
SWI cursus: ‘Inleiding programmeren in Java’
Functies definiëren nDoor combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Visual Basic.
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
Deel I: Programmeertaal C 6. Arrays en Pointers
Afstudeerproject ETHERFLOW:
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Tircms02-p les 4 Preprocessor In- en uitvoer Diversen.
Mail: (of Sheets en verdere info: Onderwerp: vervolg C
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
1.VUL AAN 25 PUNTEN 2. Corrigeer deze formule door toevoeging van 1 streepje: 25 Pt 3. Schrijf om het even wat : 25 Pt 4. Teken een rechthoek met drie.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Hoofdstuk 3 - Conditionele logica
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Les 1: Zaterdag 10 mei 2014 Wim Peeters
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag User-defined characters op de.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Een (vaste) melodie spelen op de PC speaker 
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail: Sheets.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Het jaartje rond … januarifebruarimaartaprilmeijunijuliaugustusseptemberoktobernovemberdecember.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Javascript. Vandaag Samenvatting vorige les PSD's Random Array's Herhalingen – For-loop – While-loop.
Openingstijden La Vita Sana 2015
Hoofdstuk 9.2 Strings.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Afscherming 1 hour Monday ochtend morning.
Transcript van de presentatie:

MICPRG Les 12 Microcontroller Programmeren in C

127 Real-time clock PC heeft een RTC Real-time Clock die de “time of day” bijhoudt. De RTC is voorzien van een batterij zodat de tijd “doorloopt” als de PC uitstaat. De tijd (en datum) kan uitgelezen worden met behulp van de ANSI C standaard include file

128 Types: time_t (een 32 bits integer). struct tm (een struct). VeldnaamBeschrijving tm_sec Seconden tm_min Minuten tm_hour Uren tm_mday Dag van de maand (1..31) tm_mon Maand (0 = januari) tm_year Jaar (Dus 115 = 2015) tm_wday Dag van de week (0 = zondag) tm_yday Dag van het jaar (0..365) tm_isdst Zomertijd 0 = Nee, >0 = Ja, <0 = Onbekend

129 Functies: time_t tijd; char *s; struct tm *pt; time(&tijd); Haalt de huidige tijd en datum uit het operating systeem. Als de tijd en datum niet beschikbaar is wordt tijd gelijk aan -1. tijd = het aantal seconden dat verlopen is sinds 00:00:00 GMT, January 1, s = ctime(&tijd); Converteert de tijd naar een string. pt = localtime(&tijd); Converteert een time_t naar een struct tm. tijd = mktime(pt); Conveerteert de struct tm naar een t_time.

#include int main(void) { struct tm* pt; time_t tijd; time(&tijd); printf("Vandaag is het:\n%s\n", ctime(&tijd)); pt = localtime(&tijd); printf("Dag %d van het jaar.\n", pt->tm_yday + 1); printf("Datum: %02d-%02d-%4d.\n", pt->tm_mday, pt->tm_mon + 1, pt->tm_year ); if (pt->tm_isdst >= 0) { printf("Het is "); if (pt->tm_isdst == 0) printf("wintertijd.\n"); else printf("zomertijd.\n"); } getchar(); return 0; } 130 Voorbeeld

#include int main(void) { struct tm t, *pt; time_t tijd; char* dag[] = {"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"}; printf("Geef de datum.\n"); do { printf("Dag (1..31): "); fflush(stdin); } while (scanf("%d", &t.tm_mday) != 1 || t.tm_mday 31); do { printf("Maand (1..12): "); fflush(stdin); } while (scanf("%d", &t.tm_mon) != 1 || t.tm_mon 12); t.tm_mon -= 1; do { printf("Jaar ( ): "); fflush(stdin); } while(scanf("%d", &t.tm_year) != 1 || t.tm_year 2037); t.tm_year -= 1900; Voorbeeld (1 van 2) Op wat voor dag valt … ? 131

132 Voorbeeld 1 van 2 t.tm_sec = 0; t.tm_min = 0; t.tm_hour = 0; t.tm_isdst = -1; tijd = mktime(&t); if (tijd == -1) { printf("Ongeldige datum!\n"); } else { pt = localtime(&tijd); printf("%02d-%02d-%4d is een %s.\n", pt->tm_mday, pt->tm_mon + 1, pt->tm_year , dag[pt->tm_wday]); } fflush(stdin); getchar(); return 0; }

int main(void) { HANDLE hCom; char in; hCom = InitCom(1); printf("Er wordt nu een S verstuurd.\n"); WriteCom(hCom, 'S'); printf("Ontvangen karakters worden op het scherm gezet"); printf(" totdat een Q wordt ontvangen.\n"); do { in = ReadCom(hCom); if (in != 'Q') { putchar(in); } } while (in != 'Q'); CloseHandle(hCom); printf("\nEINDE.\n"); getchar(); return 0; } 133 Seriële communicatie (1 van 4) Zie: (Robertson Bayer). InitCom, WriteCom en ReadCom zijn door mij geschreven functies. Zie volgende sheets…

134 Seriële communicatie (2 van 4) #include HANDLE initCom(int comPortNumber) { DCB dcb; HANDLE hCom; BOOL fSuccess; char comPortName[20]; sprintf(comPortName, "\\\\.\\COM%d", comPortNumber); hCom = CreateFileA(comPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hCom == INVALID_HANDLE_VALUE) { MessageBoxA(0, “Kan seriële poort niet openen!", "Fout", MB_OK | MB_ICONEXCLAMATION); exit(-1); } fSuccess = GetCommState(hCom, &dcb); if (!fSuccess) { MessageBoxA(0, “Kan seriële instellingen niet lezen!", "Fout", MB_OK | MB_ICONEXCLAMATION); exit(-1); }

135 Seriële communicatie (3 van 4) dcb.fParity = TRUE; dcb.BaudRate = CBR_9600; dcb.ByteSize = 7; dcb.Parity = EVENPARITY; dcb.StopBits = ONESTOPBIT; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = FALSE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fRtsControl = RTS_CONTROL_DISABLE; fSuccess = SetCommState(hCom, &dcb); if (!fSuccess) { MessageBox(0, “Kan instellingen van de seriële poort niet aanpassen!", "Fout", MB_OK | MB_ICONEXCLAMATION); exit(-1); } return hCom; }

136 Seriële communicatie (4 van 4) char ReadCom1(HANDLE hCom) { char inBuffer[2] = " "; unsigned long nBytesRead; while (ReadFile(hCom, &inBuffer, 1, &nBytesRead, NULL) && nBytesRead == 0); if (nBytesRead != 1) { MessageBox(0, “Kan seriële poort niet uitlezen!", "Fout", MB_OK | MB_ICONEXCLAMATION); exit(-1); } return inBuffer[0]; } void WriteCom1(HANDLE hCom, char c) { char outBuffer[2] = " "; unsigned long nBytesWritten; outBuffer[0] = c; WriteFile(hCom, &outBuffer, 1, &nBytesWritten, NULL); if (nBytesWritten != 1) { MessageBox(0, "Kan seriële poort niet beschrijven!", "Fout", MB_OK | MB_ICONEXCLAMATION); exit(-1); }

137 Huiswerk Breidt het voorgaande programma uit met een timeout zodat als er na 1000 ms nog niets ontvangen is een melding wordt gegeven. Zie Schrijf het bijbehorende programma voor de ATmega32. Wacht op 'S'. Verstuur "HalloQ".

138 Uitwerking #include int main(void) { char c; // E-1 UCSRA = 0x00; UCSRB = 0x18; UCSRC = 0xA4; UBRRH = 0; UBRRL = 23; while (1) { while (~UCSRA & 1<<RXC); if (UCSRA & (1<<FE | 1<<DOR | 1<<PE)) { c = UDR; while (~UCSRA & 1<<UDRE); UDR = '?'; } else { c = UDR; if (c == 'S') { char s[] = "HalloQ"; int i; for (i = 0; s[i] != '\0'; i++) { while (~UCSRA & 1<<UDRE); UDR = s[i]; } return 0; }