Forum: Mikrocontroller und Digitale Elektronik AVR programmieren mit TwinAVR funktioniert nicht


von stefan (Gast)


Lesenswert?

Hallo,
ich muss gestehen ich hab von AVR programmierung keine Ahnung.
Aber die Umsetztung einer Bauanleitung aus dem Netz (DMX Dimmer von 
digitalenlightenment.de)
zwingt mich dazu zwei AVR´s zu programmieren. Oder besser ein fertiges 
Programm richtig zu übertragen.
Nun habe ich folgendes Problem:
Die Bauanleitung schlägt TwinAVR vor in zusammenhang mit einer SP12 
Hardware. (Direkte Verbindung der LPT mit der Schaltung über 2 
Widerstände und 5 Drähte)
Ich habe mir also TwinAVR herunter geladen und die Hardware gebaut.
Aber mit TwinAVR bekommen ich keine Verbindung zum AVR. Eine 
Programmierung ist nicht möglich. Egal was ich mache, ich bekomme immer 
die Fehlermeldung
"Programm enable Sequence not successfull..."
Nun hab ich es mit Pony-Prog und einer etwas anderen Hardware versucht. 
Wie es scheint werden Daten übertragen, aber die Schaltung gibt keinen 
Mux von sich. Mein Verdacht ist nun, dass Pony Prog die Daten in einer 
anderen Weise überträgt wie TwinAVR...
Kann das sein?
Und hat vielleicht jemand einen Tip wie ich es mit TwinAVR doch noch 
hinbekommen könnte?
Muss ich bei TwinAVR auch den Bausteintyp auswählen? Hab noch nichts 
dergleichen gefunden.

Vielen Dank und Grüße
Stefan

von stefan (Gast)


Lesenswert?

P.S.:
Der Port-Treiber für NT-Systeme (Win-XP in meinem Fall) ist installiert.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1/ Hast du einen Schaltplan zu Hand, den man kontrollieren könnte? 
Besonders wie das "Targetboard", d.h. wo der AVR drauf sitzt, aufgebaut 
ist. Das Targetboart wird mit eigener Spannung versorgt?

2/ Hast du das Programmieren bereits auf einen anderen Rechner versucht? 
Bei manchen LPT? COM? Schnittstellen insbesondere an Laptops sind die 
Pegel OK für den eigentlichen Zweck aber untergrenzwertig für 
Exotenanwendungen wie AVR Programmieren.

von stefan (Gast)


Angehängte Dateien:

Lesenswert?

hey danke für die schnelle Antwort... einen Schaltplan habe ich 
natürlich.
Das Targetboard hat eine eigene Stromversorgung.
So weit hatte ich mich dann in die Problematik schon eingelesen :-)
Ich habe das Flashen auch bereits auf einem anderen Rechner versucht. 
Dieser hat noch Win98 und somit ist kein Porttreiber von Nöten.
Aber auch da hat es nicht geklappt.
Nun zum Schaltplan...
Wärend der Programmierung ist nur der AVR aufgesteckt. Alle anderen 
"Mehrbeiner" sind runter.
Was mir ein bischen zu denken gibt ist der, laut Schaltplan, negierte 
Reseteingang...
TwinAVR kann nach der programmierung den Eingang negieren. PonyProg 
scheinbar nicht.
Das sind so meine Gedanken zu der Sache. Schaltplan hängt wie gesagt an.
Vielleicht fällt dir ja was ein. Wäre super!!!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

stefan wrote:

> Was mir ein bischen zu denken gibt ist der, laut Schaltplan, negierte
> Reseteingang...

Das ist ein gutes Bauchgefühl von dir.

Beim ISP Programmieren muss der ISP-Programmieradapter den Reset 
bedienen können, weil im Reset-Zustand programmiert wird! Bei deinem 
Schaltplan ist das nicht vorgesehen.

Als einfacher Hack (#) könntest du an die Leitung zwischen dem /RESET 
des Resetcontrollers TL7705ACP und dem AVR die /RESET Leitung vom 
ISP-Programmieradapter anschliessen.


   TL7705ACP /RESET -------------+------------ /RESET AVR
                                 |
                                 |
                                 "RESET" vom ISP-Programmieradapter

Skizze wie es z.B. im AVR-Tutorial aussieht
http://www.mikrocontroller.net/articles/Bild:Avr-schaltplan-1.gif
(aus http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment
)

# ADD:

Checke vorher im Datenblatt des TL7705ACP, ob der Probleme hat, wenn der 
/RESET Ausgang eine Fremdspannung oder GND sieht. Checke ob der Ausgang 
/RESET des TL7705ACP dem ISP-Programmer bzw. der PC-Schnittstelle 
Probleme mit zu grossen Stromen macht.

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

So wie ich es im Datenblatt sehe, kann nichts kaputt gehen, wenn du den 
ISP wie beschrieben anklemmst.

Aber vielleicht wartest du noch, bis sich ein Erfahrener dazu meldet.

von stefan (Gast)


Lesenswert?

Hello again....
Leider schlechte Nachrichten.
Ich habe den AVR nocheinmal mit eingesetztem Reset Controller geflasht 
(So wie du es mir skizziert hattest).
Wieder ohne Erfolg.
Aus einem anderen Forum habe ich dann noch erfahren, dass die Fuse Bits 
bei Pony Prog genau entgegengesetzt zu TwinAVR gesetzt werden (Da wo bei 
TwinAVR ein Haken ist darf bei Pony Prog keiner sein). Das hatte ich 
vorher also auch falsch gemacht. Aber selbst mit richtig gesetzten Fuses 
ändert sich nichts.
Nur zum reinen Verständniss:
Der Resetcontroller setzt den Reset-Eingang des AVR beim Einschalten 
kurz auf Lo und macht damit einen Reset. Mal angenommen der Eingang 
würde durch das flashen nicht, wie es vorgesehen ist, dauerhaft auf Lo 
aktiv gesetzt.  Dann würde das doch heißen, dass der Reset durch ein Hi 
signal durchgeführt wird und die Schaltung theoretisch funktionieren 
müsste, wenn ich den Pegel am Reset Eingang nach dem Einschalten 
dauerhaft auch Lo setzte.
Aber auch dann tut sich nichts.

von Frank L. (florenzen)


Lesenswert?

stefan wrote:
> Hello again....
> Leider schlechte Nachrichten.
> Ich habe den AVR nocheinmal mit eingesetztem Reset Controller geflasht
> (So wie du es mir skizziert hattest).

stefb schrieb das du den AVR im Reset halten mußt solange geflasht wird 
und nicht daß du den Reset-Controller einbauen sollst.

> Wieder ohne Erfolg.
> Aus einem anderen Forum habe ich dann noch erfahren, dass die Fuse Bits
> bei Pony Prog genau entgegengesetzt zu TwinAVR gesetzt werden (Da wo bei
> TwinAVR ein Haken ist darf bei Pony Prog keiner sein). Das hatte ich
> vorher also auch falsch gemacht. Aber selbst mit richtig gesetzten Fuses
> ändert sich nichts.

Wie setzt du denn bitteschön die Fuse-Bits ohne daß der Controller im 
Reset bleibt?

> Nur zum reinen Verständniss:
> Der Resetcontroller setzt den Reset-Eingang des AVR beim Einschalten
> kurz auf Lo und macht damit einen Reset. Mal angenommen der Eingang
> würde durch das flashen nicht, wie es vorgesehen ist, dauerhaft auf Lo
> aktiv gesetzt.  Dann würde das doch heißen, dass der Reset durch ein Hi

Da wird beim flashen garnichts gesetzt. Der Reset muß auf GND sein um 
überhaupt flashen zu können.

> signal durchgeführt wird und die Schaltung theoretisch funktionieren
> müsste, wenn ich den Pegel am Reset Eingang nach dem Einschalten
> dauerhaft auch Lo setzte.
> Aber auch dann tut sich nichts.

Zieh den Reset-Controller wieder raus und lege den Reset-Eingang des AVR 
hart auf GND. Nimm meinetwegen eine Drahtbrücke oder nen rostigen Nagel 
aber auf GND muß der Reset liegen zum flashen.
Solange das nicht gegeben ist kannst du auch keine Fuses verstellen.


liebe grüße
frank

von spess53 (Gast)


Lesenswert?

Hi

>Zieh den Reset-Controller wieder raus und lege den Reset-Eingang des AVR

Einen vernünftigen Programmer vorrausgesetzt, stört der TL7705 definitiv 
nicht beim Programmieren. Langjährige eigene Erfahrung.

MfG Spess

von stefan (Gast)


Lesenswert?

@Frank
allem anschein nach hast du eine ganze Menge von meinem letzten Beitrag 
falsch verstanden.

"Nur zum reinen Verständniss:
Der Resetcontroller setzt den Reset-Eingang des AVR beim Einschalten
kurz auf Lo und macht damit einen Reset. Mal angenommen der Eingang
würde durch das flashen nicht, wie es vorgesehen ist, dauerhaft auf Lo
aktiv gesetzt.  Dann würde das doch heißen, dass der Reset durch ein Hi
signal durchgeführt wird und die Schaltung theoretisch funktionieren
müsste, wenn ich den Pegel am Reset Eingang nach dem Einschalten
dauerhaft auch Lo setzte."

Das war nicht auf die Programmierung bezogen sondern auf den NORMALEN 
Betrieb der Schaltung!
Das der Reset beim proggen auf Lo gehalten werden muss hab ich 
inzwischen auch kapiert. Und das scheint ja auch zu funktionieren, sonst 
würde Pony wohl keinen einwandfreien Datentransfer melden...
Ich habe auch nie ein Problem beim setzten der Fuses beklagt. Das läuft 
genauso reibungslos wie auch die Programm-Übertragung.
Trotzdem: Die Schaltung funktioniert nicht!
Und bitte jetzt keine Vermutungen das es einen Fehler im 
Schaltungsaufbau sein könnte. Ist alles gemessen und gecheckt.

Mein Verdacht ist folgender (Ich hoffe ich kann es in verständliche 
Worte fassen): Bei TwinAVR gibt es die Möglichkeit im Setup festzulegen 
ob der Reset-Eingang des AVR nach der Programmierung Hi-Aktiv oder 
Lo-Aktiv sein soll. Diese Möglichkeit finde ich bei PonyProg nicht.
Wie ist der Reset-Eingang also vom Werk aus? Hi oder Lo Aktiv?
Sollte er vom Werk aus Hi-Aktiv sein so muss dies ja irgendwie geändert 
werden können. Denn laut Schaltplan muss er Lo-Aktiv sein damit die 
Schaltung ihren Reset bekommt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Vielleicht trägt die Benennung des Pin9 mit /RESET (not RESET) zur 
Verwirrung bei. Wenn der Pin RESET heissen würde, bedeutete dies nach 
Konvention, dass ein HIGH Signal hier einen RESET auslöst. Das passt 
nicht zur aktuellen Situation: Ein LOW löst einen Reset aus, d.h. man 
kennzeichnet den Pin9 entsprechend als not RESET (/RESET).

Der AVR befindet sich ohne Betriebsspannung quasi im Reset-Zustand. Beim 
Einschalten der Betriebsspannung ist die nicht sofort "da", sondern erst 
in paar Millisekunden ansteigend. Der Resetcontroller ist dafür da, um 
den AVR so lange im Anfangsreset zu halten, bis nach dem Einschalten 
eine stabile Betriebsspannung im System vorhanden ist. Im AVR-Tutorial 
wird diese Im-Reset-Halten-Zeit über das Aufladen eines Kondensators 
(Kapazität) über einen Widerstand (Strombegrenzung) realisiert.

Hast du ein Spannungsmessgerät? Wenn der AVR nicht im Reset ist, d.h. am 
arbeiten oder trödeln, solltest du zwischen dem /RESET (Pin 9 am AVR) 
und GND (Pin 20 am AVR) einen HIGH Pegel messen (um 5V). Das sollte, 
wenn Vcc vorhanden und der Resetcontroller gearbeitet hat, paar 
Millisekunden nach dem Einschalten der Fall sein.

Alternativ zum Multimeter könntest du dir mit einer Low-Current-LED und 
einem >1K Vorwiderstand eine RESET-Anzeige basteln. Vcc an Vorwiderstand 
an Anode LED/Kathode an Reset-Leitung. LED leuchtet wenn Vcc vorhanden 
und AVR im Reset ist.

Wenn der AVR in den Reset geht, d.h. wenn der ISP-Programmieradapter 
anfangen will zu programmieren, ändert sich der Pegel dort auf LOW (ca. 
0V).

Wenn ISP-Programmer es nicht schafft, den AVR in den Reset zu holen, 
dann kann keine ISP-Programmierung stattfinden. Die beobachtete TwinAVR 
Fehlermeldung "Programm enable Sequence not successfull..." deutet 
darauf hin. Die Meldung kommt - gerade getestet - auch auf einem PC ohne 
ISP-Programmieradapter. Hast du deinen 5 Strippen (kurz!!! Jeder 
Zentimeter ist zuviel) + 2 Widerstände Aufbau mind. x Mal kontrolliert?

Spätestens jetzt werden im Forum die ersten Kommentare gedacht, dass 
solche Simpel-ISPs gehen können, aber nicht müssen und dass die nix für 
Anfänger sind. Ein ordentlicger ISP-Adapter mit gepufferten Leitungen 
ist zuverlässiger und sicherer für die LPT-Schnittstelle des PCs.

Die Fuses sind eine heikle Sache. Wenn die einmal falsch gesetzt sind, 
kann es sein, dass der AVR gar nicht mehr aufs ISP-Programmieren 
anspricht. Wenn du "Glück" hast, hat PonyProg nix gemacht, weil es die 
gleichen Probleme wie TwinAVR hat, aber nix meldet. Bei etwas Pech ist 
nur die Taktquelle verstellt und das kann man mit weiterem Basteln 
retten. Wenn du viel Pech hast, ist z.B. der Resetpin disabled, d.h. der 
AVR reagiert auf dortige Signale nicht mehr. Näheres im Wiki-Artikel 
AVR Fuses. Es wäre hilfreich die ggf. vermurkste Fuses-Einstellung 
anzugeben. Alternativ einen frischen AVR benutzen, wenn vorhanden.

von stefan (Gast)


Lesenswert?

Uiuiui :-)
Das war jetzt ne Menge Input.
Vielen Dank dafür!
Ich werde alles der Reihe nach abarbeiten...
Da kommt endlich mal mein Logiktester der seit Jahren im Regal verstaubt 
zum Einsatz.
Bislang steht es um den AVR noch sehr gut wie es scheint, da ich ihn 
noch löschen kann und auch die Fuses setzten kann. (Zumindest mault 
PonyProg nicht rum)
Dann mal auf in eine Lange nacht:-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

stefan wrote:

> Bei TwinAVR gibt es die Möglichkeit im Setup festzulegen
> ob der Reset-Eingang des AVR nach der Programmierung Hi-Aktiv oder
> Lo-Aktiv sein soll.

Nein. Der AVR gibt dir vor, wie der Pin9 reagiert.

Du kannst in TwinAVR nur vorgeben, dass die Reset-Leitung vom ISP nach 
dem Programmieren LOW oder HIGH sein soll.

Willst du haben, dass der AVR rennt und willst du den ISP Adapter nicht 
jedesmal nach dem Programmieren abziehen, dann darf die Reset-Leitung 
vom ISP aus nicht LOW sein.

D.h. du machst in TwinAVR dort ein Häkchen, um die Leitung nach dem Ende 
des Programmierens HIGH zu halten.

Besser ist es IMHO den Adapter nach dem Programmieren zu entfernen. Wer 
weiss, was Vcc und der Rest der Schaltung in Verbindung, dem AVR 
Programm mit der LPT-Schnittstelle deines PCs macht.

von stefan (Gast)


Lesenswert?

Ahhhhh, das war genau die Info die ich gesucht habe!
Dankeschön! Da war ich dann auf dem Holzweg...
Wie gesagt ich hab da nicht viel Plan von:-)
Aber ich werd mich gleich nochmal dransetzten und alles was du in deinem 
Roman von vorhin geschrieben hast checken.
Die Kabel des "Programmieradapters" sind ca.30cm lang.
Ich werd sie nachher mal so kurz machen wie es eben geht.

von stefan (Gast)


Angehängte Dateien:

Lesenswert?

Sooo...
ich bin jetzt eine Menge Punkte durchgegangen.(Zur Hand dabei einen 
Logiktester und mein braves Multimeter)
Also:
Der Reset-Controller arbeitet. (Beim einschalten ca.1/4sec lo- dann hi 
pegel an Pin9 des AVR)

Bei allen Programmiervorgängen ist zu beobachten, dass der Pegel des 
Reset Eingang brav auf Lo gezogen wird und da für die Programmierdauer 
verweilt.

Der Quarzoszillator gibt laut meinem Multimeter auch brav die 
geforderten 8Mhz an pin 19 ab.

Wenn ich den AVR nach dem Programmieren auslese entsprechen die Daten im 
PonyProg Fenster exakt denen die auf den AVR geschrieben wurden. (Das 
sollte doch die Gewissheit dafür sein, dass die Daten korrekt angekommen 
sind)

Der AVR bekommt eine saubere und stabile Spannung von 5V an Pin40 (GND 
an Pin20)

Die Fuse Bits wurde alle korrekt und laut eines Sceenshot von TwinAVR 
der der Bauanleitung beilag gesetzt und übertragen. (In PonyProg 
allerdings "negiert" weil Pony andersherum funkioniert) Den Sceenshot 
habe ich angehängt.

Und trotz allem bekomme ich auf meinem Display immer noch keine 
Anzeige...

Ich habe noch einen Wink bekommen, dass PonyProg nur Intel-Hex Dateien 
verabeitet kann. Könnte es eventuell sein das meine Datei "nur" Hex ist 
und PonyProg daraus falsche Daten generiert??

Messungen an dem unter Spannung stehenden AVR haben an keinem der LCD 
Ausgänge irgendwelche Spannungspegel (weder Hi noch Lo) ergeben.

Inzwischen habe ich den AVR schon gegen einen zweiten getauscht. Genauso 
den Reset-Controller und das Display ebenso um eventuell vorhandene 
andere Fehlerquellen auszuschliessen.

Alles ohne Erfolg....

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

stefan wrote:

> Wenn ich den AVR nach dem Programmieren auslese entsprechen die Daten im
> PonyProg Fenster exakt denen die auf den AVR geschrieben wurden. (Das
> sollte doch die Gewissheit dafür sein, dass die Daten korrekt angekommen
> sind)

Hier kann die Programmiersoftware dich foppen, wenn der zuvor 
geschriebene Puffer beim Lesen aus irgendwelchen Gründen nicht 
aktualisiert wird. Sicherer ist die Diagnose, wenn du die 
Programmiersoftware nach dem Schreiben verlässt und neu startest und 
dann ausliest.

> Die Fuse Bits wurde alle korrekt und laut eines Screenshot von TwinAVR
> der der Bauanleitung beilag gesetzt und übertragen. (In PonyProg
> allerdings "negiert" weil Pony andersherum funktioniert) Den Sceenshot
> habe ich angehängt.

Gleiches wie oben. Noch zu beachten: Vor dem Schreiben der Fuses den 
alten Zustand einlesen, dann Häkchen setzen, dann Schreiben.

> Und trotz allem bekomme ich auf meinem Display immer noch keine
> Anzeige...

Das kann daran hängen, dass kein Programm auf dem ABR ausgeführt wird, 
oder dass ein fehlerhaftes Programm ausgeführt wird oder dass dein LCD 
nicht mit dem Programm "harmoniert" oder ein sonstiges Problem vorliegt.

Du kannst mit deinem Multimeter feststellen, ob der AVR mit dem 
richtigen Programm arbeitet, ohne dass du auf das LCD angewiesen bist.

Dazu überwachst du die Spannung an einem beliebigen Pin an PORTB gegen 
GND. Anfangs sollte dort LOW (Input ohne Pullup) vorhanden sein. Bei der 
Initialisierung des Programms werden an PORTB Pullups zugeschaltet und 
der Pegel sollte auf HIGH wechseln.

Das LCD wird im Programm mit einer Initialisierungszeit von 15ms 
betrieben. Je nach LCD Controller auf dem LCD selbst kann das zu knapp 
sein.

Und unbedingt an den klassischen Fehler bei LCDs denken: den Kontrast 
muss man Aufdrehen (Spannungseinstellung), damit man was sieht!

> Ich habe noch einen Wink bekommen, dass PonyProg nur Intel-Hex Dateien
> verabeitet kann. Könnte es eventuell sein das meine Datei "nur" Hex ist
> und PonyProg daraus falsche Daten generiert??

Die originale Firmware.hex sieht tatsächlich nicht wie ein Intel-Hex 
File aus. Der Aufbau ist so

Adresse Inhalt
1
000000:c607
2
000001:9518
3
000002:c022
4
000003:9518
5
000004:9518
6
000005:9518
7
...

Der von mir probeweise übersetzte Quellcode aus dem Firmware-Ordner 
sieht so aus (Intel-Hex Format)

Typ Adresse Inhalt....
1
:020000020000FC
2
:1000000007C6189522C018951895189545C04EC07A
3
:100010001895B3C018951895189506EA002E00E0BB
4
:10002000102E1A94F1F70A94D1F7089504E6002EE1
5
...

Ich habe im Anhang ein Archiv mit meiner Test-Intel-HEX-Version (ggf. 
damit flashen) und dem Binärfile, das ich aus obigem Firmware-File 
erzeugt habe.  Letzteres kannst du benutzen, um es in einen Hexeditor zu 
laden und mit dem Inhalt des AVRs vergleichen. Wenn das nicht passt, 
dann meine HEX flashen oder den Quellcode mit dem AVRStudio selbst zu 
einem KEX assemblieren.

von stefan (Gast)


Lesenswert?

Stefan, wenn du jetzt hier wärst würde ich dich umarmen und übelst 
abknutschen :-)
ES FUNKTIONIERT!!!!
Es lag tatsächlich an einer "nicht Intel Hex" Datei!
Mit deiner Übersetzten Version hat es auf anhieb geklappt!

Ich bedanke mich aufs aller herzlichste!!!!!

Sollte ich noch weitere Probleme haben weiß ich jetzt auf welches Forum
(und auf wen im speziellen) verlass ist!!!!!

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
Noch kein Account? Hier anmelden.