www.mikrocontroller.net

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


Autor: Timo H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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



         }

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: emil (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.