Forum: Mikrocontroller und Digitale Elektronik Atmega88 = Anfänger benötigt Hilfe!!


von Fritz .. (bonsai112)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hab hier nen Atmega88 den ich proggen will.

Ähm, nachdem die Materie absolut neu für mich ist, hab ich das Teil 
anscheinend verfust :-(

Nun möcht ich heut Nachmittag, versuchen das Teil mit dem anlegen eines 
Taktes durch nen Quarzoszi wiederzubeleben. So wie in den Tutorials 
beschrieben. Ist es richtig, das ich den Takt anlegen muss (und angelegt 
lasse) um dann die Fuses wieder auf Auslieferungszustand zurückzusetzen?

Als Anmerkung: Auf der aufgebauten Schaltung sitzt ein normaler Quarz. 
Muss dieser dann zum zurücksetzen abgelötet werden?

Mein Fehler (DENKE ICH ZUMINDEST) war das ich zuerst die Fuses geproggt 
hab (mit den Einstellungen im Dateianhang) Und dann die hex Datei 
raufspielen wollte, was dann nicht merh ging?!

So, wenn ich alles richtig verstanden hab, dann sollte man doch zuerst 
die hex Datei, dann die eep und danach die Fuses setzen?

Noch eine andere Frage: Ich versteh immer noch nicht so ganz ob ich Vcc 
brauche...

Hier mal die Schaltung um die es geht:
http://www.doc-diy.net/photo/smatrig21/images/smatrig21_schematics200.png

Vom Programmieradapter geht ja auch die Leitung Vcc weg.
Auf meiner fertigen Platine hab ich ja auch Vcc als "Eingang".

Jetzt weiß ich nicht ob ich nun die Batterie beim Programmieren einlegen 
muss und dafür Vcc nicht mit aufklemme oder ob ich Vcc anklemme und 
dafür die Batterie weg lasse... Oder ob ich da überhaupt Vcc brauche.

Hier noch mein Progadapter: 
http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel

der hängt an nem Win XP Rechner. Bios Port ist auf EPP gestellt. Zum 
Proggen wollt ich Pony nehmen. Hätte aber auch das Win AVR Paket mit 
GUI.

Fragen über Fragen.

Ich hoffe ihr könnt mir etwas licht in mein Dunkel bringen.

Bedanke mich im Voraus für Eure Hilfe.

Gruß
bonsai

von Helfer (Gast)


Lesenswert?

Mit den Fuses aus deinem Anhang dürfte der Atmega88 nicht verfust 
sein. Die Taktquelle ist "Int. RC Osz." und das Anlegen eines externen 
Wiederbelebungstakts bringt nix. Vorausgesetzt, die Einstellung aus 
deinem Bild oben ist wirklich im Atmega88.

Ich würde beginnen mit dem Multimeter die Schaltung zu untersuchen:

# Ist Vcc da?

# Wird RESET beim ISP Programmieren auf Low gezogen?

# Ist RESET high, wenn das Programm laufen soll?

# Klappern die ISP Leitungen beim ISP-Programmieren (niedrigste ISP 
Geschwindigkeit benutzen)?

Die Schaltung ist "gewöhnungsbedürftig", mir springen ins Auge:

# Der fehlende Pull-up Widerstand an RESET

# Der ultrafette C2

Der gezeigte ISP-Programmieradapter hat keine eigene 
Spannungsversorgung. Du musst das Atmega88 Board mit Vcc versorgen und 
das wird dann über den Programmierstecker Pin 2 Vcc/2 an den 
ISP-Programmieradapter abgegeben (auf dessen Vcc-Netz).

von Peter R. (pnu)


Lesenswert?

Die notwendigen fuses beim atmega88 kenn ich nicht auswendig, aber:

Das Aussperren geschieht meistens dadurch, dass man den internen Takt 
des Kontrollers oder den Quarzoszillator abschaltet und damit ist die 
ISP-Einheit im Kontroller stillgelegt. externes Anlegen eines Taktes 
hilft dann, nur muss die Bedingung f(extern) > 4f(ISP) erfüllt sein, 
damit die ISP-Einheit richitg arbeitet.

Dumm wirds erst dann, wenn ISP-Eingang oder reset per fuse 
wegprogrammiert wurde (hier nicht der Fall). Dann ist ISP nur mit 
HV-Programmierung wieder zugänglich.

Der externe Takt "überfährt" einfach den Quarz, er braucht nicht 
unbedingt ausgelötet werden. Höchstens ein 32-kHz Uhrenquarz kommt durch 
die Amplitude des externen Taktes in Gefahr.

Fürs Programmieren braucht sowohl das Treiber-IC -244 als auch der 
Kontroller eine Betriebsspannung. Beide sollten etwa gleiche 
Betriebsspannung haben, sonst kann die Ausgangsspannung des -244 auf 
einer Leitung die zulässige Eingangsspannung des Kontrollers 
überschreiten oder umgekehrt. Wenns von der Stromaufnahme her geht, ist 
eine Verbindung der VCC's besser.

Pony ist für Viele besonders in der Schreibweise mit den Häkchen bei den 
fuses unübersichtlich, da gibt es übersichtlichere Lösungen.

von Fritz .. (bonsai112)


Lesenswert?

Helfer schrieb:
> Die Taktquelle ist "Int. RC Osz." und das Anlegen eines externen
>
> Wiederbelebungstakts bringt nix. Vorausgesetzt, die Einstellung aus
>
> deinem Bild oben ist wirklich im Atmega88.

Ich sag mal so: Der Screenshot (von des Fuses) ist von der Seite des 
Entwicklers. Und auf der steht das diese Einstellungen gesetzt werden 
sollen. Das hab ich auch so gemacht. Und genau seit dem habe ich keinen 
Zugriff mehr auf den Kontroller. Kann ihn auch nicht mehr auslesen.
Ich bekomm nur noch die Meldung das es jetzt wohl kein Atm88 mehr sein 
soll (hab mir jetzt leider nicht gemerkt wie genau die Meldung war).

Ich wüßte nicht was ich sonst falsch gemacht haben könnte?
Wie schon gesagt. Bis zum setzen der Fuses hatte ich Zugriff.



Helfer schrieb:
> Die Schaltung ist "gewöhnungsbedürftig", mir springen ins Auge:

Sorry. Hab das Ding nur nachgebaut. Soll aber wohl funktionieren. 
Zumindest hatten es einige Leute schon nachgebaut.



Peter R. schrieb:
> Fürs Programmieren braucht sowohl das Treiber-IC -244 als auch der
>
> Kontroller eine Betriebsspannung. Beide sollten etwa gleiche
>
> Betriebsspannung haben, sonst kann die Ausgangsspannung des -244 auf
>
> einer Leitung die zulässige Eingangsspannung des Kontrollers
>
> überschreiten oder umgekehrt. Wenns von der Stromaufnahme her geht, ist
>
> eine Verbindung der VCC's besser.

Gut. Das heißt dann ich verbinde Vcc zu meiner Schaltung.
Was mich jetzt etwas wundert:
Beim Aufbau des Progradapters gehen ja 5V Vcc über die Diode an den -244 
auf Pin 11 und Pin 20 und zusätzlich auf den Pin 6 vom Sub-D Stecker. 
Reicht das dann aus um den -244 und den Atm88 zu versorgen?



Danke Euch.

von Helfer (Gast)


Lesenswert?

> Gut. Das heißt dann ich verbinde Vcc zu meiner Schaltung.
> Was mich jetzt etwas wundert:
> Beim Aufbau des Progradapters gehen ja 5V Vcc über die Diode an den -244
> auf Pin 11 und Pin 20 und zusätzlich auf den Pin 6 vom Sub-D Stecker.
> Reicht das dann aus um den -244 und den Atm88 zu versorgen?

So betrachtest das so:
                                          VCCUC
         5V          +5V         X1(6)    VCC (Pin2)
Netzteil o-------------o ISP-    o----------o Atmega88
         o-------------o Adapter o----------o
         GND         GND         GND      GND

So würde ich das nicht aufbauen, weil der ISP-Adapter dann immer 
angeschlossen sein muss, wenn der Atmega88 programmiert (logisch) werden 
soll und wenn er laufen soll (unlogisch).

Grundsätzlich sollte die Spannungsversorgung zuerst an den Atmega88 
(Targetboard) und von dort aus kann der ISP-Programmieradapter versorgt 
werden. Der braucht kaum Strom, das sollte passen.

         5V        VCCUC          VCC          ISP-Adapter (keine 
Pin-#!)
Netzteil o-------------o Atmega88 o----------o +5V
         o-------------o          o----------o GND
         GND         GND          GND
                                  o----------o Reset
                                  o----------o Sck
                                  o----------o MiSo
                                  o----------o MoSi

VCCUC gelangt über den ISP-Programmierstecker (Pin2) an den 
ISP-Programmieradapter (VCC/2) und über die Diode (Verpolschutz) auf die 
VCC Versorgung des ISP-Programmieradapters, also an 74*244.

von Fritz .. (bonsai112)


Lesenswert?

Ahh! Jetzt hab ich kapiert!

Danke für die "Skizze"

Ich soll die 5V direkt auf VCCUC legen (in meinem Fall vor den 
Kondesator = sprich 4, 6, 18 bekommen +5Volt sowie 3, 5, 21 bekommen GND 
vom Netzteil)

demnach wird dann meine 5V Versorgungsspannung im Atemaga88 
"durchgeleitet"

und liegen dann an meinem Targetboard auf VCC an. Von dieser dann 
letzendlich über die Diode auf meinen74HCT244.

Dann ist doch aber die Schaltung vom ISP Dongle (Link oben) falsch?
Da kommt doch (oben, rechts) die Versorgungsspannung und geht auf die 
Diode und auf den Stecker!

Naja dann werd ich die Sache mal so anschließen.

Ähmm. Zwecks der Reihenfolge...

1. hex-File
2. eep-File
3. Fuses umstellen

Richtig?

von spess53 (Gast)


Lesenswert?

Hi

>Ähmm. Zwecks der Reihenfolge...

>1. hex-File
>2. eep-File
>3. Fuses umstellen

>Richtig?

Ist egal. Wenn du mit den Fuses eine höhere Taktfrequenz einstellst kann 
auch der ISP-Takt höher sein und das Programmieren geht schneller.

Nur die Lock Bits sollten als letztes gesetzt werden.

MfG Spess

von Helfer (Gast)


Lesenswert?

> Ich soll die 5V direkt auf VCCUC legen (in meinem Fall vor den
> Kondesator = sprich 4, 6, 18 bekommen +5Volt sowie 3, 5, 21 bekommen GND
> vom Netzteil)
> demnach wird dann meine 5V Versorgungsspannung im Atmega88
> "durchgeleitet"

Nö, nicht "durchgeleitet".

Es muss Leiterbahnen/drähte geben von dem Punkt wo du +5V anschliesst 
(VCCUC) bis zu den Vcc-Pins am Atmega und dem Pin an der 
Programmierbuchse im Schaltplan des Targetboards (bezeichnet mit Vcc).

Im Stromlaufplan des Atmega88-Targetboards hast du ein VCCUC-Netz und 
ein GND-Netz und die Spannung/GND vom Netzteil müssen an diese Netze 
angeschlossen werden.

Die vollständigen Leitungszüge dieser Netze sind in dem von dir 
gezeigten Bildchen nicht explizit angegeben, nur die Anfänge, um die 
Zeichnung einfacher lesbar zu machen. Aufbauen/Routen muss man die 
Leitungen (s.u. #1) aber!


         5V        VCCUC          VCC          ISP-Adapter
                            #1                 (keine Pin-#!)
                       +----------+
                       |          |
Netzteil o-+---------+-o          o----------o +5V
           |1µF      |
          ===       ===  Atmega88
           |    100nF|
         o-+---------+-o          o----------o GND
                       |          |
                      ---        ---
         GND          GND        GND
                                  o----------o Reset
                                  o----------o Sck
                                  o----------o MiSo
                                  o----------o MoSi

Der dickere C2 sitzt normalerweise im oder in der Nähe des Netzteils 
bzw. der Netzteilbuchse. Zusätzlich sitzen kleinere Abblockkondensatoren 
von ca. 100nF an jedem Vcc-GND Paar ganz in der Nähe der versorgten ICs 
oder µCs.

In dem Stromlaufplan des ISP-Programmadapters oben links sind ein 
Vcc-Netz (-> Symbol) und ein GND-Netz (-| Symbol) zu sehen. Der 74*244 
ist an dieses Netz angeschlossen. Und eine Vcc/2 Zufuhr (->> Symbol). 
Über das ISP-Programmierkaben werden Vcc des Targetboards mit Vcc/2 und 
dann Vcc des Programmieradapters verbunden (inkl. der anderen 
Leitungen).

von Fritz .. (bonsai112)


Lesenswert?

Also hat alles nix gebracht. Der Parallele mag nicht!
Danke nochmal an Alle!


Kann mir von Euch nun jemand mal die Reihenfolge erklären, nach der ich 
proggen muss?

Nochmal zum Aufbau:

-nagelneuer Atmega88PA (nochmal nen neuen gekauft)

-serieller Progadapter (nachdem ich meinen parallelen gegen die Wand 
geklatscht hab, weil gar nix ging)
 den hier: http://s-huehn.de/elektronik/avr-prog/avr-prog-alt.htm

-Pony Prog (bzw. AVR Dude, der aber meinen Adapter nicht erkennen will = 
Fehler: Com1 ist kein Printerport)

-Hab eine .hex-File und ein .eep-File sowie einen Screenshot wie die 
Fuses gesetzt werden sollen.
 dieses Projekt: 
http://www.doc-diy.net/photo/smatrig21/?german=1#build_your_own (bissl 
runterscrollen!)

------------------------------------

In welcher Reihenfolge muss ich nun programmieren?

.hex-File danach das .eep-File und wenn alles geproggt ist die Fuses 
setzen?

Oder muss ich vorher bestimmte Fuse einstellungen setzen (um überhaupt 
schreiben zu können) und danach dann die Files programmieren und am 
Schluss nochmal Fuses setzen (wie z.B. dann umstellen auf ext. Quarz)??

Zur Info: Jetzt im Moment ist ein 32 kHz Uhrenquarz mit auf der Platine.
Kann der drauf bleiben wenn ich proggen will oder sollte ich ihn ablöten 
und danach (wenn dann die Fuses auf ext. Quarz stehen) wieder auflöten?

-----------------------------------

So nun hab ich alles angeschlossen.

Pony Prog kann die Fuses auslesen, wenn ich aber irgendwas vom AVR lesen 
oder schreiben will, kommt die Meldung:
"unable to probe device, bad device or device locked -(25)"

Gibts irgendwelche bestimmten Einstellungen auf der die serielle 
Schnittstelle unter WinXP gesetzt werden muss?
Handshake, Baud, Flusssteuerung usw.?




Danke für Eure Hilfe!

Gruß
Fritz

von Düsendieb (Gast)


Lesenswert?

Du tippst am besten bei Ebay mal:
"USB ISP Programmer" ein


und kaufst Dir für 20€ einen USB Programmer



Fritz S. schrieb:
> 32 kHz Uhrenquarz

Da lass lieber den internen Ocillator mit 1Mhz laufen

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Vielleicht ist auch nur deine ISP-Frequenz zu hoch. Stell sie doch mal 
auf 4kHz oder so. Das ist dann zwar laaaaahm, aber du kannst auch noch 
einen µC, der mit einen Uhrenquarz läuft, programmieren.


Gruß
Jontahan

von spess53 (Gast)


Lesenswert?

Hi

>Kann mir von Euch nun jemand mal die Reihenfolge erklären, nach der ich
>proggen muss?

Nochmal: Ist, bis auf die Lock Bits, egal.

>Pony Prog kann die Fuses auslesen, wenn ich aber irgendwas vom AVR lesen
>oder schreiben will, kommt die Meldung:
>"unable to probe device, bad device or device locked -(25)"

1. Welch Werte liest du bei den Fuses aus? stimmen die mit den Default-
   Werten aus dem Datenblatt überein?

2. Wie sieht denn deine Stromversorgung aus?

MfG Spess

von Fritz .. (bonsai112)


Lesenswert?

Ich weiß!!!!! Das ein gekaufter Programmer besser ist als ein selbst 
Zusammengepfuschter, das hab ich nun schon öfter gehört! Aber im Moment 
hab ich nur den!

Ok. Blöde Frage, wie stelle ich die ISP Frequenz herunter?

Also die Fuses die ich auslese, stimmen mit dem Datenblat überein.

Und der Atmega bekommt aus einem Labornetzteil direkt auf alle AVcc und 
Vcc, Saft (sprich: der serielle Adapter hat ja keine "Rückleitung", 
daher bekommt nur der AVR seinen Strom).

Melden tut er sich ja.

Ok. Das heißt im Werkszustand muss ich nicht erst "irgendwas" unlocken, 
damit ich ihn beschreiben kann.
Ich war nur etwas verwirrt, da die Fehlermeldung hieß"... or device 
locked".

von Fritz .. (bonsai112)


Lesenswert?

So ich habs endlich geschafft dem Teil ein Lebenszeichen zu entlocken...

Nächstes Problem:


avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is 
"C:\WinAVR-20100110\bin\avrdude.conf"

         Using Port                    : COM1
         Using Programmer              : ponyser
         Setting isp clock delay        : 1000
         AVR Part                      : ATMEGA88PA
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page 
Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- ---------
           eeprom        65     5     4    0 no        512    4      0 
3600  3600 0xff 0xff
           flash         65     6    64    0 yes      8192   64    128 
4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0 
4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0 
4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0 
4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0 
4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0 
0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0 
0     0 0x00 0x00

         Programmer Type : SERBB
         Description     : design ponyprog serial, reset=!txd sck=rts 
mosi=dtr miso=cts

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.33s

avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA88PA is 1E 93 0A
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: current erase-rewrite cycle count is -50462977 (if being 
tracked)
avrdude: erasing chip
avrdude: reading input file "C:\smatrig21.hex"
avrdude: input file C:\smatrig21.hex auto detected as Intel Hex
avrdude: writing flash (7926 bytes):

Writing | ################################################## | 100% 
814.88s

avrdude: 7926 bytes of flash written
avrdude: verifying flash memory against C:\smatrig21.hex:
avrdude: load data flash data from input file C:\smatrig21.hex:
avrdude: input file C:\smatrig21.hex auto detected as Intel Hex
avrdude: input file C:\smatrig21.hex contains 7926 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
800.66s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x85 != 0x00
avrdude: verification error; content mismatch

avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK

avrdude done.  Thank you.





Weiß da jemand Rat??

Danke.

von Karl H. (kbuchegg)


Lesenswert?

Fritz S. schrieb:
> So ich habs endlich geschafft dem Teil ein Lebenszeichen zu entlocken...

Glaubst du.
Schau dir doch mal das Protokoll an.
Überall wo avrdude etwas auslesen sollte, steht da 0.

> avrdude: safemode: lfuse reads as 0
> avrdude: safemode: hfuse reads as 0
> avrdude: safemode: efuse reads as 0

Das Ding ist weg.
Wie du das geschafft hast, weiß ich nicht. Aber diese Billigsdorfer 
Lösungen von Brennern taugen nun mal nichts.

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.