Forum: Mikrocontroller und Digitale Elektronik timer0 beim AT90USB162


von zibi d. (zibi)


Lesenswert?

Hallo mikrocontroller.net Besucher!

Ich bin neu bei den Atmel Controllern und hab einige 
Anlaufschwierigkeiten,
Ich Studieren Elektrotechnik an der FH Bonn-Rhein_Sieg.

Also:
AT90USB162
Timer0 bei Überlauf Interrupt, sw hochzählen und ausgeben.

#include <avr/io.h>
#include <avr/signal.h>
//#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 3686400UL
#endif
#include <util/delay.h>


volatile unsigned char sw=0;    //global variable
SIGNAL(SIG_OVERFLOW0)      //ISR for timer0 overflow
{
      sw++;
      PORTB=sw;    // PORTB bits 4 to 7: leds
      TCNT0 = 112;    //set the reload value
}


int main (void){

  DDRB=0xff;      //set PORTB as output
  PORTB=0x00;
  DDRC=0x00;      //set PORTC as input with pull ups
  PORTC=0xff;
  TCNT0 = 112;    //set the reload value
  TCCR0B |= (1<<CS02) | (1<<CS00);//prescaler clk/1024
  TIMSK0 |= (1<<TOIE0);    //overflow interrupt enable
  sei();        //global Interrupt enable


  while(1){
  PORTB=sw;

  }
}


Mach ich hier grundsätzlich was falsch? Beispiele aus der Codesammlung 
halfen mir irgendwie nicht weiter. Es ist ein Quarz angeschloßen und die 
Hardware funktioniert auch sonst.

Vielen Dank für eure Hilfe!
Zibi

von Karl H. (kbuchegg)


Lesenswert?

zibi dziubek schrieb:

> Mach ich hier grundsätzlich was falsch?

Kommt drauf an.
Was soll den passieren? Was passiert statt dessen?

Gab es eine Warnung vom Compiler? Hast du im Simulator schon mal 
probiert, ob die Konfig-Bits richtig gesetzt werden und die ISR 
angesprungen wird?

von zibi d. (zibi)


Lesenswert?

Ich benutze AVR Studio 6 und hier wird eine Simulation für den 
AT90USB162
nicht unterstützt:
Start Debugging(F5) -> AVR Simulator -> AT90USB162 Support: No

Bei Überlauf des Timer0 soll die ISR Rourine ausgeführt werden in der
sw++;
PORTB=sw;
gesetzt wird.

Hiermit sollte einfach anhand von 4 leds an PORTB überprüft werden, ober 
der Timer0 läuft.

von Salami (Gast)


Lesenswert?

zibi dziubek schrieb:
> Hiermit sollte einfach anhand von 4 leds an PORTB überprüft werden, ober
> der Timer0 läuft.

Also geht alles.

von zibi d. (zibi)


Lesenswert?

Wenn es gehen würde, würde ich nicht um Hilfe bitten.
Keine der leds blinkt somit gehe ich davon aus, dass die ISR nicht
angelaufen wird.

Hat den jemand von euch schon timer der AT90xxxxxx benutzt? Muss etwas 
spezielles beachtet werde im Vergleich zu den atmegas?

von Karl H. (kbuchegg)


Lesenswert?

Dreh mal bei deinem Compiler den Warninglevel hoch, bzw. sieh die die 
Warnings an.
1
c:/winavr-20090313/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
2
../Timer_90_USB.c:11: warning: 'SIG_OVERFLOW0' appears to be a misspelled signal handler

es ist nie eine gute Idee, Warnings zu ignorieren.
Die erste ist harmlos, die zweite aber nicht.

von zibi d. (zibi)


Lesenswert?

Dank Karl Heinz!

Hab jetzt das Warning gegoogled:

Nicht wie in meinen Buch zu finden
SIGNAL(SIG_OVERFLOW0){

}

sondern:
ISR(TIMER0_OVF_vect){

}
 muss verwendet werden.

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.