Hi, ich beschäftige mich erst seit kurzem mit Mikrocontrollern. Ich habe mir das Experementierboard von microkontroller.com gebaut. Ich habe ein wenig mit den PIN A & B rumgespielt. Nun wollte ich mir eine Uhr basteln, habe meine Vorhaben jetzt erst einmal auf eine Stopuhr beschränkt.Ich arbeite mit dem AT80S8535. Kann sich jemand vielleicht hier einmal einen Blick über den Code werfen und mir grob sagen ob meine Denkweise richtig ist? // 8BIT Timer, als Zähler für eine Stopuhr. // CPU 8.000.000 Operationen /sec // Timertakt 8.000.000 : 8 = 1.000.000 (Runterbrechen des CPU Takt's) // 1.000.000 : 250 = 4.000 Operationen /sec (Abfrage des Registers alle 250 Operationen) // 4.000 Operationen /sec werden mit der WHILE Schleife gezählt und setzt danach sec++ void schalter2() // wir basteln eine stopuhr { char text[16]; int i=0, sec=0; TCCR0 = 0x02; // CPU TEILUNG DURCH ACHT : TIMEREINSTELLUNG 8BIT while ( (PINA & 0xF8) != 0x08 ) // STOP mit einer Taste. { if ( TCNT0 == 0xFA ) // TimerRegister auf 250? { TCNT0=0x00; // und wieder zurück auf null. while( i != 4000) // Die restlichen 4000/s Takte Runterbrechen { i++; if ( i == 4000 ) // sind die restl. 4000 erreicht, 1sec vergangen. { sec++; i=0; } } // END WHILE } // END IF! sprintf(text,"%i", sec); // Umwandeln int to char lcd_gotoxy(0,1); lcd_puts(text); // Ausgabe LCD } // END WHILE! // PORTB = 0x40; LED ANKNIPSEN }
Hi Timer frägt man nicht per Software ab das läßt man die Hardware machen. Schau mal im Datenblatt bei den Timern nach welche Betriebsmodi die unterstützen und welche Interrupts sie auslösen können. Dann sollte man bei einem µC auf sprintf verzichten insbesondere wenn du nur ein int als char[] auf dem Display ausgeben willst. Da gibts weit kleinere Routinen. Matthias
mattias hat mit der ausgabe vollkomen recht; vergiss sprintf(), die kostet min. 500 bytes platz im speicher! mach das so: #include <stdlib.h> char lcd_text[16]; char text[16]; itoa(text, lcd_text); lcd_puts(lcd_text); hatte ähnliches problem, herr sasha weitkunat hat mir hier im forum geholfen, danke! emil
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.