Forum: Mikrocontroller und Digitale Elektronik Fragen über Fragen..? C inside..;-)


von Timo H. (Gast)


Lesenswert?

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



         }

von Matthias (Gast)


Lesenswert?

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

von emil (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.