Fragen über Fragen..? C inside..;-)

Gast #33007
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



         }
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.