mega32 -> mega8: Auswertung des ICP geht nichtmehr

OP #976822
Lesenswert?

Moin,

ich bin noch recht neu mit AVR Programmierung aber hab schon quasi das 
Hello-World der AVR-Welt umgesetzt (siehe angehaengtes Bild).

Nun wollte ich von dem Mega32 aus der Bastelkiste auf einen Mega8L 
umziehen, eigentlich ja nicht das Problem dachte ich.

Vorher hatte ich an PORTC die 8LEDs haengen und einen HALL-Sensor am ICP 
vom Mega32, also PD6.

Nun wollte ich die LEDs an PORTD haengen und den HALL an PB0.

Dafuer muesste ich ja >nur< die Ausgaben der LED-Stellungen aendern, 
denn Init vom Capture Pin solle ja gleich bleiben.

Jedoch kann ich den PB0 so oft im Sim rumklicken wie ich will, ich lande 
nie in meinem Interrupt-Handler :(

Hier mal das wichtige bevor man sich in meinem verworrenen Code 
verlaeuft:
1
SIGNAL(SIG_INPUT_CAPTURE1)
2
{
3
  //[lots of useless code]
4
  TCNT1 = 0;              // timer reset, das sollte man sehen im Sim
5
  //[a lot more of useless code]
6
}
7

8
int main(void)
9
{
10
    sei();                // Interrupt aktivieren
11
    TCCR1B = (1<<ICES1)  | (1<<CS10);   // Input Capture Edge, kein PreScale, kein CTC Mode
12
    TIMSK = (1<<TICIE1) | (1<<TOIE1);    // Interrupts akivieren, Capture + Overflow
13

14
   DDRB = 0x00;            // Set up PortB (MEGA8) da PB0 der ICP ist einfach alle auf EINGANG
15

16

17
    while(1)
18
    {
19
      //[code galore]
20
    }
21
}

Wie gesagt, mitm Mega32 laeuft sowohl aufm AVR als auch im Sim. Da kann 
ich den PD6 togglen und sehe das der Timer dann wunderbar auf 0 gesetzt 
wird. Mit Mega8 bekomme ich das nicht hin.
Ich les seit 3Std hier im forum und ueberall da wo google mich hinwirft 
aber ich bekomms nicht hin.

Waere super falls jemand dazu ne Idee hat.
Angehängte Dateien:
Gast #976900
Lesenswert?

Hallo,

außer dass "sei();" am Ende der vollständigen I/O+SFR-Initialisierung 
stehen sollte (in Deinem Beispiel also direkt vor dem "while(1)"), sehe 
ich keine Probleme mit Deinem Code. Mit der Dezember 2007 WinAVR Version 
("SIGNAL" dafür natürlich durch "ISR" ersetzt!) und AVRStudio v.4.14 
lässt sich Dein Code auch korrekt simulieren.

Gruß
 risu
#976903
Lesenswert?

Du hast den Overflow-Interrupt freigeschaltet, aber keine ISR dafür. 
Wahrscheinlich kommt jetzt:
"Doch, ich habe eine Overflow-ISR, nur nicht gepostet."
In dem Fall liegt der Fehler auch irgendwo im "nicht gepostet", denn der 
Codeschnipsel oben, ergänzt durch eine leere Overflow-ISR, funktioniert 
im Simulator einwandfrei.
OP #977172
Lesenswert?

Morgen Leute,

vielen Dank. Ich hab den Fehler jetzt gefunden, oh Gott ist das 
peinlich...

Ich hab zwr im Project Config auf Atmega8 umgestellt aber der Simualtor 
hatte unten noch Mega8 stehen. Dann laeuft der ganze kram natuerlich 
auch nicht so wie man will. Ich hab eben einfach neues Projekt und den 
Code eingefuegt und es laeuft.

Werft Steine, es ist peinlich :)

Aber danke, ich lad nebenbei mal die neue AVR-Studio (man ist der Server 
lahm) evtl hab ich dann auch aktuelleren Code irgendwann was SIGNAL vs 
ISR angeht etc...

MFG
Claas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren