www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit einfachem 8bit Timer (ATMEGA8515)


Autor: deacy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hoffe, ihr könnt mir weiterhelfen. Hab ein kleines einfach Programm 
geschrieben um die timer zu verstehen....leider klappts das ganze nur in 
der simulation so, wie ich es will (LEDS an PORTB sollen blinken) ATMEGA 
8515 @ 4MHz
#include <avr/io.h>        
#include <stdint.h>

int main (void) { 

int count=0;

DDRB  =  0xFF;

TCCR0  |=  ((1<<CS02) | (1<<CS00));

while(1){
  PORTB=0xff;
  if(TOV0==1){
    TIFR |= (1<<TOV0);
                count=count+1;
             if(count==3906){
    PORTB  =  0x00;
    count=0;
              };
  };
};

};

Meiner rechnung nach sollte bei nem prescaler von 1024 und 4mhz in der 
sekunde 3906 overflows stattfinden....also sollte portb alle 1 sec 
einmal ganz kurz blinken....bei mir sinds aber bestimmt 10 mal pro 
sec...der avr läuft auch sicher auf 4mhz quarz!!

Wo ist mein fehler?

Vielen dank für eure hilfe!

Deacy

die LEDs an meine STK500 sind augenscheinlich dauernd an, obwohl ich nen 
prescaler von 1024 verwende....das sollte ja zumindest

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
deacy wrote:
>
> Wo ist mein fehler?

Mindestens 2 Fehler

Fehler 1
Das hier ist die Codesammlung. Hier wird fertiger, lauffähiger
Code präsentiert.

Fehler 2
    if(TOV0==1){

Seit wann fragt man denn ein Bit in einem Register so ab?
TOV0 ist ein Bit im Register TIFR, wie man unschwer erkennen
kann, wenn man sich ansieht wie du das Bit wieder löscht
    TIFR |= (1<<TOV0);

ALso sollte doch wohl TIFR in irgendeiner Form in der Abfrage
wohl vorkommen. Di Abfrage muss also umgangssprachlich
lauten: Ist das Bit TOV0 im Register TIFR gesetzt?
In C schreibt sich das dann

    if( TIFR & TOV0 ) {

Nach weiteren Fehlern hab ich dann nicht mehr Ausschau gehalten.

Autor: deacy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,

das kommt davon wenn man sonst nur Variablen Programmiert hat.....jetzt 
funktionierts...danke!

Das Thema kann auch gerne gelöscht werden!

vg

Deacy

Autor: Gabriel Wegscheider (gagosoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

> In C schreibt sich das dann
>
>     if( TIFR & TOV0 ) {

Ich glaube Du hast bei Deiner Antwort auch einen kleinen Fehler
 if(TIFR & _BV(TOV0) { 
TOV0 ist ja die Bitnummer, nicht die Bitmaske

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.