PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega48 Probleme unter AVR Studio4 - bin ich allein?



The Man
21.01.2011, 16:39
Hallo Forum,

ich habe ganz massive Probleme mit dem ATmega 48 in AVR Studio 4.
Ich versuche mit dem Timer1 klar zu kommen. Ich habe dabei beachtet, dass er zwar weitgehend pingleich mit Mega8 ist, jedoch viele Registerbeziechnungen und Bitmuster anders sind. Auch in den Projektoptionen habe ich mich schon ein dutzend mal versichert, dass der 48er ausgewählt ist.

Erscheinungen:
- ich kann ihn z.B. nicht dazu bringen, einen ICR Interrupt bei steigender Flanke auszuführen. Das passiert konsequent bei fallender.

- In der ISR des Input Intrerruptes will ich auf Compare Match A umschalten. Das geht ums verrecken nicht.

- In Main mache mache ich eine Abfrage ob TCNT1 >= 40000 ist. Wenn ja, halte ich den Timer an, um einen Überlauf zu verhindern. Jedoch lösche ich den Inhalt nicht. Den brauche ich als lange Pause zum synchronisieren in der ISR. Dort kriege ich den Timer aber nicht wieder ans laufen. Ich machs jetzt so, dass ich statt ihn anzuhalten immer wieder den Wert 40000 reinschreibe.

Und auch sonst tauchen immer wieder Merkwürdigkeiten auf. Da gehen Pins High, die im Quelltext mal existiert habe, aber gelöscht wurden, oder reagieren gar nicht.


Wayens interessiert, die ISR´s


SIGNAL (TIMER1_CAPT_vect)
{

if (TCNT1 >= 40000){
PORTB = 0b00001000;// zum debuggen mittels Digitalanalyzer - bis hier hin klapps
edge_counter = 0;
TCCR1B = 0b00000001;// try and error fehlersuche
TIMSK1 = 0b00000010;// enable OCR1A int
TCCR1B = 0b00000001;// try and error fehlersuche
OCR1A = 500;
}
TCNT1 = 0;
edge_counter++;
}

SIGNAL (TIMER1_COMPA_vect)
{
TCNT1 = 0;
TIMSK1 = 0b00100000; // enable cmp int
PORTB = 0;// zum debuggen mittels Digitalanalyzer - bis hier klapps nicht
}


und Wayens noch weiter interessiert, ich beschäftige mich mit dem Summensignal aus dem RC Modellbau. Das soll ein Generator werden, der aus bestimmten Gründen, ein eingelesenes PPM Signal mit einbeziehen soll.

EDIT:
ich habe auch gesehen, dass sich im AVR Prog aks Device kein 48er auswählen lässt. Habe jetzt immer mit Mega8 geflasht. Hatte da auch schon erscheinungen, wenn ich z.B. auf internen RC Oszillator 4 MHz umgestellt habe, dass der Controller einfach tot war. In Extern High Frequency zu schalten geht zum Glück.

viele Grüße,
Jasson

Hubert.G
21.01.2011, 17:19
Deinem Code nach verwendest du noch eine ältere Version von AVR-GCC und AVR Studio.
Du solltest dir mal eine neuere Version oder die entsprechenden Service-Packs herunter laden.
http://www.mikrocontroller.net/articles/AVR-Studio
Einen Mega48 als Mega8 zu flashen gibt sicher ärger.

Besserwessi
21.01.2011, 17:23
Wenn man beim Programmieren den Mega48 nicht auswählen kann, dann sollte man sich um eine Update kümmern. Als Ersatz würde ich eher einen Mega88 oder so wählen, den wird es aber vermutlich auch nicht geben. Sonst lieber statt AVRProg einfach AVRDude oder den Programmer in BASCOM wählen. Da gibt es den Mega48 usw.

Ist das Noch eine alte Version von GCC. "Signal" ist für die alten Versionen (3.xx) - schon seit ein paar Jahren gibt es aber 4.xx Versionen - da hat sich was geändert. Normal sollte es dann aber wenigstens Warungen geben.

Ein beliebter Fehler bei Interrupts ist es das Volatile zu vergessen.

The Man
21.01.2011, 19:01
Hey ya!!

Danke für die Antworten, wie es scheint, komme ich um den AVR Dude nicht herum. Ich habe die Updates und SP´s installiert, aber im AVRProg kann ich den 48er noch nicht finden.

Gibt es denn eine Möglichkeit, an den Dude ranzukommen, ohne WinAvr laden zu müssen? Hatte das jetzt immer nur in Kombination gefunden.

Danke schön!!

The Man
21.01.2011, 22:40
Naja, stimmt nicht ganz. War eben da:

http://www.nongnu.org/avrdude/

und bin dort in das download area gegangen. Nur was da das richtige ist eröffnet sich mir nicht. Ich habe jetzt auch schon einige "Dudes" runtergeladen. Bei einem finde ich aber kein install.exe oder ähnliches sondern nur .h und.c files. Ein anderes flackert kurz auf und schließt sich sofort wieder. Also es ist kurz so etwas wie eine Commandbox zu sehen, macht ja auch Sinn, nach dem was ich gelesen habe. Aber ich krieg es nicht so richtig ans laufen.

Und was ich noch nicht so ganz eingeordnet habe sind die Schritte in denen ich vorgehe. Zum Beispiel: 1.) AvrDude installieren, 2.) GUI installieren...

Ich habe mich auch um die Suchfunktion bemüht, aber so wirklich die passenden Infos bekomme ich nicht.

The Man ( jetzt gerade nicht ganz so "man-ig" ^^)

Hubert.G
22.01.2011, 10:13
Warum verwendest du das AVR-Studio nicht auch zum Programmieren des Kontroller?
Oder hast du keinen Programmer den das AVR-Studio unterstützt?

oberallgeier
22.01.2011, 10:29
... habe die Updates und SP´s installiert, aber im AVRProg kann ich den 48er noch nicht finden ...Ohne Angabe, welche Version vom AVRStudio Du jetzt fährst, hilft es sich schlecht.

............https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2584

Diese Version (siehe Bild) ist von 2009 und da gabs den 48er schon drin. Bitte zu den Flashprogrammen genauere Angaben.

The Man
22.01.2011, 10:46
Hi Leute, danke für die große Anteilnahme!!

Ich habe jetzt mal das Programm auf den Mega8 zurück adaptiert. In einem neuen Projekt wohlgemerkt, um Evantualitäten zu beseitigen.

Auch hier hab ich "strange" Probleme. Hier mal ein Bild dazu, dass sicher mehr sagt, als 1k Worte (nerdi, ich weiß^^)

https://storage.driveonweb.de/dowdoc/31d6e24b27c9f6278e76a09382b4ea17.jpg


Die Version ist 4.18. Build 716.
Habe gestern das neueste runtergeladen und auch das SP 3 hinzugefügt. In den Projekt Properties kann ich den 48er auch auswählen nur eben im AVRProg nicht.
Aber den obigen Versuch berücksichtigend, glaube ich eh, das da was hinüber ist.

Ich mach mal Sicherungskopien von allem, lösche das AVR Studio komplett und installiere ganz neu.

Mal sehen,
see you Space Cowboy

oberallgeier
22.01.2011, 10:59
Ähhhhh - bitte was ist AVRProg ? Ein Button, ein Programmteil das ich noch nicht kenne?

Das Bild von oben mit der mega48-Anzeige kommt nach Druck auf den Button [Display the 'Connect' Dialog] in der Werkzeugkiste STK500.

Mir ist immer noch nicht klar, welchen Programmer Du verwendest. Hast Du das Posting von Hubert.G oben gelesen?

Hubert.G
22.01.2011, 11:03
Du hast die Frage nach dem Programmer noch nicht beantwortet.
Das ganze neu zu installieren ist sicher nicht schlecht, wird aber kaum was bringen.
Hast du in deinem Programm die Variable edge_counter als volatile deklariert?

The Man
22.01.2011, 12:39
So, stimmt. Neuistallieren war ein Schuss in den Ofen.

Programmer : mySmartUSB Version 2.10

Die Variablen sind alle als Volatile definiert, also die globalen für Interrrupts.

Der AVR Prog sitzt bei mir im Menu "Tools" direkt als erstes und sieht so aus:

https://storage.driveonweb.de/dowdoc/31d6e24b27c9f6275b25519384243dd8.jpg

Und im dem untersten Dropdownmenu wo "Device" drüberstehtm, kann ich keinen at48 auswählen. Aber wie gesagt, ich habe das Programm wieder auf at8 adaptiert und das Problem ist das gleiche. Aus dem Programm stammt auch das von mir eingestellte Bild oben.

oberallgeier
22.01.2011, 13:02
... mySmartUSB Version 2.10 ... AVR Prog sitzt bei mir im Menu "Tools" direkt als erstes ...Ok, danke. Jetzt habe ich erstmal das Problem, dass - soweit ich es weiß, das AVRStudio seit einiger Zeit AVR910 kompatible Flasher nicht (mehr) unterstützt. Könnte es daran liegen? (Jedenfalls wird in meinem AVRStudio AVR910 nicht mehr angezeigt.)

Deine Doc ist vermutlich diese hier von 2007 (http://www.produktinfo.conrad.com/datenblaetter/175000-199999/191510-da-01-ml-MYSMARTUSB_AVR_PROGRAMMER_de_en.pdf) - und da steht tatsächlich dieser "Connect"-Versuch wie von Dir beschrieben.

Einen Hinweis noch: AVRStudio sucht (suchte jedenfalls vor einiger Zeit) Programmer am seriellen Eingang (COM-Port) nur bis 4. Evtl. prüfst Du das? Steht in der o.g. Doc auf Seite 11.

Ansonsten bin ICH mit meinem Latein am Ende.

Hubert.G
22.01.2011, 13:20
So einen Programmer habe ich nicht, im STK500 kann ich den Mega48 auswählen.

askazo
22.01.2011, 14:22
Wenn ich das aus Deinen Codeschnippseln richtig erkenne, steht Deine ISR innerhalb einer anderen Funktion (ich vermute mal, in der main).
Das ist grundlegend falsch. Die ISR ist eine eigenständige Funktion und muss daher auch für sich alleine stehen.

Und Du solltest Dir mal eine aktuelle Version von WinAVR runterladen - SIGNAL ist schon seit einigen Jahren veraltet...

Gruß,
askazo

Besserwessi
22.01.2011, 17:50
AVRProg ist ein alter Bestandteil von AVRStudio, um Programmer nach AVR910 anzusprechen. So weit ich weiss wird der Teil aber schon seit Jahren nicht mehr Aktualisiert - da gab es das Problem mit den Chip Codes, die der Prorgammer kennen musste um den Chip über einen 1 Byte Code zu identifizieren. Für die neueren Chip wie den Mega48 oder Tiny2313 sind da keine offiziellen Codes mehr definiert.

AVRdude gibt es auch einzeln - aber hier scheint auch die C Version schon sehr alt zu sein. Wieso kein komplett neues Winavr. Auch bei den alten Versionen was AVRdude schon mit dabei. Zur Not ließe sich das CONFIG File auch anpassen - als der Mega48 neu war hab ich das auch mal gemacht. Mit einer zu alten Version hat es aber bei mir nicht geklappt.

The Man
22.01.2011, 19:26
Hi Besserwessi,

ich hatte schon versucht an WinAvr ran zu kommen, über sourceforge. Aber da muss ich dann auch wieder erst noch irgendwas anderes installieren und hin und her. Aus dem Grund bleibe ich lieber bei dem AVR Studio hätte lieber den AVR Dude dazu.
Und erhlich gesagt nervt mich dieser dauernde Upgrade-Marathon. Das soll nicht gegen euch gerichtet sein. Nur meine Meinung - Never change a running System.

Ich hab ja seit heute ein nagelneues AVR Studio4 Verion 4.18 Build 716.
In einem vorigen Posting dieses Threads wurde ja schon gesagt, dass seit GCC 4,xx die Angabe "Signal" veraltet ist - wie ist denn die neue? War eben im RN Wissen, da wird noch von Interrupts und Signal´s gesprochen.

mfg,
The Man

Hubert.G
22.01.2011, 19:57
Im AVR-Studio
Help avr-libc-user-manual Library Reference <avr/interrupt.h>: Interrupts
findest du eine Aufstellung der alten und neuen ISR Bezeichnungen

askazo
22.01.2011, 22:52
Aus dem Grund bleibe ich lieber bei dem AVR Studio...
AVR Studio kann von Haus aus nur Assembler. Um damit C-Code kompilieren zu können, musst Du schon den WinAVR installiert haben! Um aktuell zu bleiben, sollte man daher gelegentlich AVR Studio und WinAVR updaten. Man muss ja nicht unbedingt jeden Versionssprung mitmachen, aber einmal im Jahr sollte das schon sein.

Da WinAVR mitlerweile von Atmel übernommen wurde, findest Du die neueste Version als "AVR Toolchain Installer" auf der Seite des AVR Studios (http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725)

Die Nachfolgenotation von SIGNAL() ist übrigens ISR().

Gruß,
askazo

Besserwessi
22.01.2011, 23:38
AVRStudio 4.18 scheint mit noch einigermaßen aktuell. AVRprog wird ohnehin nicht mehr aktueller. Das sollte da noch ohne Update gehen.

Je nach bestehender Version von WINAvr wäre da ein Update sinnvoll - aber nicht unbedingt nötig.
Auch GCC3.xx hat ein paar Vorteile. Es ist da nicht nur alles besser geworden. Eine frühe GCC4.xx version (so alt das AVRDude den Mega48 nicht kennt) sollte man aber besser Upgraden.

Im RN Wissen Bereich sind auch schon beide Versionen genannt, nicht nur die alte. Es wäre aber eventuell Zeit der neuen Version den Vorrang zu geben und die alte als Sonderfall unter Kompatibilität zu erwähnen.

The Man
23.01.2011, 15:30
So, hatte seit gestern kein Internet wegen Besuchen bei Eltern.

Ich habe jetzt mal auf Assembler zurückgegriffen, damit ich sicher weiß, was da passiert. Und jetzt läuft das auch so, wie ich mir das vorstelle.
Mit dem neusten AVR Studio, mit mySmartUSB (AVR910).

@Besserwessi:
Wie kriege ich den raus, welches GCC mein AVR Studio nutzt und kann ich das eventuell manuell ändern?

Danke schön für eure umfassende Hilfe!!

The Man

Hubert.G
23.01.2011, 16:05
Suche in deinen Ordnern nach dem Ordner WinAVR
sollte dann zumindest 20100110 sein.

Besserwessi
23.01.2011, 17:50
So neu muss WinAVR gar nicht sein. Ich habe mit 20081205 noch keine wesentlichen Probleme. Aber vielleicht wäre da schon mal ein Update sinnvoll.