www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik problem mit jtag ice mkII und interrupts


Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du solltest mal den Stack initialisieren.

MfG Spess

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Watchdog abschalten

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
  }
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>du meinst folgende beiden zeilen gleich zu anfang des programms
>einfügen?

Spess will dich nur ärgern;)
Stack setzt der Compiler.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   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.

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Watchdog abschalten

du meinst das häkchen bei wdton bei den fuse-bits rausnehmen? hm... das 
war nie drin, trotzdem danke

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>platine mit einem atmega128l

>edit: atmega128 ist auch eingestellt

Was denn nun? ATMega128? Dann M103C Fuse deaktivieren.

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ä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 ...

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Nö, tun sie nicht.

doch atmega128 und atmega128-L (atmega128l)

MfG

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oO ... sry mein fehler... bzw der fehler von courier new... es handelt 
sich um einen ATmega128L

Autor: Florian Z. (zoechi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was macht denn die M103C - Fuse, ich habe nämlich das gleiche Problem 
nur mit dem AT90USB1287 bzw. AT90USBKey

Gruß
Pete

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>was macht denn die M103C - Fuse,

Bei dir gar nichts. Dein Controller hat keine.

MfG Spess

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.