Hallo! Habe hier nen Codeschnipsel der mich zum Verzweifeln bringt. Der Timer funzt auf einem 8535 wunderbar, soll aber leider auch auf nem 8515 laufen, damit ich nicht die ganze Platine umändern muss. Bekomme es also nicht hin, das der Sprung auch auf einem 8515 ausgeführt wird. Vielen Dank für eure Hilfe... .equ tm1end= 10000 ;Timer1 Endwert (entspricht 100 Interrupts/s oder Zykluszeit 10ms) .cseg .org 0x0000 t1coma: rjmp t1int ;Zeitzählung alle 10ms ; ldi r16,high(tm1end) ;Timer1 Endwert1 H out ocr1ah,r16 ;ausgeben ldi r16,low(tm1end) ;Timer1 Endwert1 L out ocr1al,r16 ;ausgeben clr r16 ;Timer1 kein PWM, kein Comp-Out out tccr1a,r16 ldi r16,(1<<ctc1)+(1<<cs11) ;Timer1 Löschen nach Vergleich out tccr1b,r16 ;und Vorteiler=8 setzen ; ; - Interrupt aktivieren ; clr r16 out gimsk,r16 ;externe Interrupts sperren ldi r16,1<<ocie1a out timsk,r16 ;Timer1 Vergleich1 freigeben sei
nachobenschieb... bitte um hilfe, sitze seit einer woche dran und bekomme es nicht hin. bitte helft mir...
.org 0x0000 t1coma: rjmp t1int ;Zeitzählung alle 10ms Schau dir mal im Datenblatt (auf www.atmel.com) die Interrupt-Table an. an ORG 0x0 steht soweit ich weiss bei allen AVR Controllern ein Jump auf RESET T1/T2 kommen irgendwo danach; das müsste dein einziger Fehler sein (ist ja nicht der komplette code den du gepostet hast)
Danke, das wars aber nicht, habe in auszügen gepostet: .cseg .org 0x0000 ; reset: rjmp start ;Programmstart exint0: reti ;nicht genutzt exint1: reti ;nicht genutzt t2comp: reti ;nicht genutzt t2ovfl: reti ;nicht genutzt t1icap: reti ;nicht genutzt t1coma: rjmp t1int ;Zeitzählung alle 10ms t1comb: reti ;nicht genutzt t1ovfl: reti ;nicht genutzt t0ovfl: reti ;nicht genutzt spiint: reti ;nicht genutzt uartrx: reti ;nicht genutzt uartem: reti ;nicht genutzt uarttx: reti ;nicht genutzt adccom: reti ;nicht genutzt eeprom: reti ;nicht genutzt ancomp: reti ;nicht genutzt
Poste doch mal das ganze Programm (als Anhang), dann kann man vielleicht auch Fehler entdecken. Die Sprungmarke "t1int" find ich in Deinen Fetzen nämlich auch nicht...
Beim compilieren kein fehler. Wenn ich den Code für nen 8535 mache und im stk500 teste, läuft alles (testweise ne LED anblitzen). mache ich den code für den 8515 passiert nichts, die led bleibt aus. bin nicht unerfahren mit avr programmierung, nur bin nun zum ersten mal dabei die timer zu benutzen.
Macht er denn im Simulator was er soll? Haben beide die selben Taktfrequenzen? ... Wenn die LED nur alle 10 ms mal kurz eingeschaltet wird sieht man bestimmt nich viel. Aber ohne ein paar weitere Infos kann man da nicht viel sagen.
Ich konnte es in den paar minuten so nebenbei noch nicht ganz einschränken, aber es scheint an einem falschen Timerprescaler oder etwas in dieser Richtung zu liegen. Sieht im Simulator jedenfalls so aus!
verstehe ich nicht ganz... auf dem 8535 läufts, takt geteilt duch 8, alle 10000 takte, also 80000 total, sprung in die interrupt routine. naja, versuche auch mal zu debuggen. bin für jede hilfe dankbar.
Im Simulator "springt" TCNT1L, aber TCNT1H und TCNT1L ergeben niemals 0x2710 (10000)... Deshalb vermute ich da den Fehler im Prescaler...
Nö, hab mist erzählt, Deine Vektortabelle stimmt tatsächlich nicht: ; --------------------------------- ; Prgrammbeginn, Interrupt-Vektoren ; --------------------------------- ; .cseg .org 0x0000 ; reset: rjmp start ;Programmstart exint0: reti ;nicht genutzt exint1: reti ;nicht genutzt t1icap: reti ;nicht genutzt t1coma: rjmp t1int ;Zeitzählung alle 10ms t1comb: reti ;nicht genutzt t1ovfl: reti ;nicht genutzt t0ovfl: reti ;nicht genutzt spiint: reti ;nicht genutzt uartrx: reti ;nicht genutzt uartem: reti ;nicht genutzt uarttx: reti ;nicht genutzt Probier die mal... :-)
MEIN RETTER!!! Bin dir zu ewigem Dank verpflichtet! Heisst das also, dass zuviele Sprungvektoren probleme verursachen... VIELEN DANK!
Die Vektortabelle ist "fest verdrahtet", also stark Modellabhängig. Vergleiche mal die beiden Vektortabellen in den Datenblättern. Der 8515 hat beispielsweise gar keinen Timer2, weshalb er auch keinen IR-Vektor dafür hat...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.