guten tag, und zwar habe ich, wie im titel bereits ersichtlich ein problem mit dem jtag ice mkii. ich benutze eine selbst gebastelte platine mit einem atmega128l, und ich kann den prozessor auch mit dem jtag programmieren. folgendes test-programm zum beispiel funktioniert einwandfrei: #include <avr/interrupt.h> #include <avr/io.h> int main() { DDRB=0xFF; PORTB=0xFF; while(1) { PORTB=~PORTB; } } sehe ich mir den portb mithilfe eines oszis an, so sehe ich, dass der portb wie es sich gehört getoggelt wird. - anschlüsse stimmen also, ich kann meinen prozessor programmieren. will ich allerdings nun ein programm raufladen welches den port mit Hilfe eines timer overflow interrupts toggled so tritt folgendes problem auf: die main funktion wird korrekt abgearbeitet, anschließend springt er in die interrupt routine, arbeitet diese einmal korrekt durch, kommt zum schluss der interrupt routine, anschließend ist eine kurze wartezeit - dann springt er wieder zum ersten punkt des programms - also wieder zur zeile int main(). selbes problem hatte ich schon vor paar monaten mit einem stk-board, dort sahen wir, als wir uns den assembler code anschauten, dass er bei dem return from interrupt befehl an eine falsche stelle des flash speichers sprang, danach bis zum schluss durchrannte und anschließend einen reset erzwang. hatte schon mal jemand ein ähnliches problem, kann sich jemand vorstellen, was mein fehler sein kann? hab ich vielleicht nur irgend ein häkchen bei den optionen im avr studio vergessen? danke!
Florian Z. schrieb: > die main funktion wird korrekt abgearbeitet, anschließend springt er in > die interrupt routine, arbeitet diese einmal korrekt durch, kommt zum > schluss der interrupt routine, anschließend ist eine kurze wartezeit - > dann springt er wieder zum ersten punkt des programms - also wieder zur > zeile int main(). Es wäre hilfreich wenn du das nicht funktionierende Programm vorstellst. MfG
du meinst folgende beiden zeilen gleich zu anfang des programms einfügen? SPL=0x5D SPH=0x5E so weit ich mich erinnern kann haben wir das bereits versucht - aber wenn ich diese werte setze, setze ich ja nur den wert der im register steht, und nicht die adresse ?? verwirrt bin edit: und noch das nicht funktionierende programm: #include <avr/interrupt.h> #include <avr/io.h> int main() { TCCR0&=0x07; TCCR0|=0x05; TIMSK|=0x01; SREG|=0x80; DDRB=0xFF; PORTB=0xff; while(1) { } } ISR(TIMER0_OVF_vect) { static char count=0; if(count++>30) { PORTB=~PORTB; count=0; } }
>du meinst folgende beiden zeilen gleich zu anfang des programms >einfügen? Spess will dich nur ärgern;) Stack setzt der Compiler.
> TCCR0&=0x07; TCCR0 kennt dein ATMega nicht. Das heisst TCCR0A oder TCCR0B. Hast du den richtigen AVR eingestellt? Nicht das du da für ATMega32 compilierst.
holger schrieb:
> Watchdog abschalten
du meinst das häkchen bei wdton bei den fuse-bits rausnehmen? hm... das
war nie drin, trotzdem danke
holger schrieb: >> TCCR0&=0x07; > > TCCR0 kennt dein ATMega nicht. Das heisst TCCR0A oder TCCR0B. > Hast du den richtigen AVR eingestellt? Nicht das du da für > ATMega32 compilierst. erstmal sry für doppelpost aber ähm, laut datenblatt, und laut der adressspalte im avr studio (die spalte die rechts angedockt ist) - lauten die register tccr0, usw. - müsste doch eigentlich stimmen?! edit: atmega128 ist auch eingestellt
>platine mit einem atmega128l >edit: atmega128 ist auch eingestellt Was denn nun? ATMega128? Dann M103C Fuse deaktivieren.
holger schrieb: >>platine mit einem atmega128l > >>edit: atmega128 ist auch eingestellt > > Was denn nun? ATMega128? Dann M103C Fuse deaktivieren. naja physisch wird ein atmega128l eingesetzt, nachdem aber unter avrstudio4 so einer nicht zur auswahl steht, habe ich mich softwartechnisch für den atmega128 entschieden, da diese pin kompatibel sind und auch das selbe datenblatt teilen.
Hi >naja physisch wird ein atmega128l eingesetzt, nachdem aber unter >avrstudio4 so einer nicht zur auswahl steht, Uraltes AVR-Studio? > habe ich mich >softwartechnisch für den atmega128 entschieden, da diese pin kompatibel >sind und auch das selbe datenblatt teilen. Mit Sicherheit nicht. Sorry für den Hinweis zum Stack. MfG Spess
Florian Z. schrieb: > TCCR0&=0x07; > TCCR0|=0x05; > TIMSK|=0x01; > SREG|=0x80; ersetze die Konstanten (0x07... und den Rest) mal durch die von den headern zur Verfügung gestellten Symbole MfG
>naja physisch wird ein atmega128l eingesetzt, nachdem aber unter >avrstudio4 so einer nicht zur auswahl steht Aus welchem Jahrtausend stammt deine AVR Studio Version? Zieh dir ganz schnell mal ne neue. >softwartechnisch für den atmega128 entschieden, da diese pin kompatibel >sind und auch das selbe datenblatt teilen. Nö, tun sie nicht.
ähm... die hätt ich mir vorgestern erst heruntergeladen.... hm.... folglich bin ich blind?! 1 moment ich habe: atmega128 atmega1280 atmega1281 (eins) atmega1284p atmega128rfa1 andre 128er hab ich nicht ...
holger schrieb:
> Nö, tun sie nicht.
doch atmega128 und atmega128-L (atmega128l)
MfG
oO ... sry mein fehler... bzw der fehler von courier new... es handelt sich um einen ATmega128L
so leute danke.... m103c fuse deaktivert, dann noch gesehen das ich dussel auch sreg=0x80 auskommentiert hatte, und jetz funktionierts!! schönen dank an alle!
was macht denn die M103C - Fuse, ich habe nämlich das gleiche Problem nur mit dem AT90USB1287 bzw. AT90USBKey Gruß Pete
Hi
>was macht denn die M103C - Fuse,
Bei dir gar nichts. Dein Controller hat keine.
MfG Spess
dann muss bei mir das Problem wohl woanders liegen, oder besitzt der AT90USB1287 eine ähnliches Fuse wie das M103c, das dieses Problem hier beheben wird. Gruß Pete
Hi
>...oder besitzt der AT90USB1287 eine ähnliches Fuse wie das M103c,
Nein, der AT90USB1287 hat nichts vergleichbares.
Es ist übrigens günstiger, einen eigenen Thread aufzumachen in dem du
dein Problem beschreibst.
MfG Spess
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.