Forum: Mikrocontroller und Digitale Elektronik Problem bei ATmega8 Programmierung


von Daniel B. (daniel10)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forengemeinde :-)

Ich bin zu dem entschluss gekommen, mit der Programmierung von 
Mikrocontrollern einzusteigen :-)
Nur leider komme ich jetzt nicht weiter.

Ich habe den ATmega8 auf einer Streifenrasterplatine mit entsprechender 
Beschaltung aufgebaut.

Der Grundsätzliche Aufbau sieht so aus:
Pin1 (Reset) ist über einen 10Kohm Widerstand an 5V angeschlossen, von 
diesem Pin geht ebenfalls eine direkte Leitung zum ISP-Adapter.
Pin7 und 20 liegen an 5V.
Pin8 und 22 liegen an Masse.
Zwischen Pin 7 und 8 befindet sich noch ein 100nF Kondensator.
Diese Beschaltung zum Programmieren findet man auch unter blafusel.de.

Habe den ISP-Adapter so aufgebaut wie im Anhang zu sehen. Benutze den 
6-poligen.



Ich benutze zum Programmieren Atmel Studio 6.1 und mySmartUSB light.
Mein kleines Programm sieht erstmal so aus:

 .include "E:\Atmel Toolchain\AVR 
Assembler\Native\2.1.39.1005\avrassembler\include\m8def.inc"

    ldi r16, 0b11111111
    out DDRB, r16

    ldi r16, 0b11111000
    out PortB, r16

ende: rjmp ende

Es befinden sich je eine LED mit Vorwiderstand an PB0-PB2, welche an 5V 
angeschlossen sind. Die sollten nun leuchten.

Nun zum Problem: wenn ich den ATmega8 programmieren will, kommt diese 
Fehlermeldung:

Erasing device... OK
Programming Flash...OK
Verifying Flash...Cancelled

Verifying Flash...Failed! address=0x0000 expected=0x0f actual=0x00

Ich kann Problemlos die Device Signature auslesen, Fusebits sowie 
Lockbits lesen.
Habe an diesen nichts verändert, einfach aus anfänglicher Angst...

Nur ich komme so nicht weiter :-( Die Schaltung ist meines erachtens 
korrekt.
Frage mich auch Grade, ob die Pinbelegung des mySmartUSB light dem 
meinigen enspricht (sollten beide nach Atmel-Standart sein?)

Evtl. weiß einer Rat. Danke

von Conny G. (conny_g)


Lesenswert?

Wenn Du die Fusebits lesen kannst und Programming: ok als Meldung kommt 
würde ich sagen, dann stimmt die Steckerbelegung und der Fehler liegt 
woanders.
Habe gerade spontan aber keinen Vorschlag wo.

Mach doch mal zum Vergleich ein einzeiliges C-Programm und programmiere 
das.

: Bearbeitet durch User
von stefanus (Gast)


Lesenswert?

Vielleicht ist die Schaltung irgendwo doch nicht wie beschrieben.
Oder die Leitungen sind zu lang - sollte max. 30cm sein.
Oder der Programmer ist defekt.
Oder der Programmer ist zu schnell - das würde ich mal als erstes 
kontrollieren.

Der Programmer muss langsamer sein, als 1/4 der Taktfrequenz des 
Mikrocontrollers.

Hast Du einen anderen Programmer oder eine andere Schaltung zum 
Vergleich, bei der Du weisst, dass sie Ok ist?

von Thomas E. (thomase)


Lesenswert?

Um eine Schaltung zu beschreiben, benutzt man einen Schaltplan und keine 
Prosa.

> Zwischen Pin 7 und 8 befindet sich noch ein 100nF Kondensator.
Warum ist zwischen 20 und 22 keiner?

> Programming Flash...OK
Das sagt nur, dass er die Daten losgeworden ist.

> Verifying Flash...Cancelled
> Verifying Flash...Failed! address=0x0000 expected=0x0f actual=0x00
Und das sagt, dass es schiefgegangen ist. Warum? Keine Ahnung.

Bring erstmal deine Hardware in Ordnung(s.o.).
Und alle Verbindungen doppelt und dreifach prüfen.

> Der Programmer muss langsamer sein, als 1/4 der Taktfrequenz des
> Mikrocontrollers.
Das ist natürlich richtig. Aber sonst liesse sich auch nichts anderes 
auslesen.

mfg.

von Daniel B. (daniel10)


Lesenswert?

Danke für die sehr schnellen Antworten.
Da dies mein erstes Programm überhaupt ist und ich mich durchs Tuturial 
hangele, weiß ich nicht, ob es gut ist jetzt auch noch C zu lernen, bzw. 
zu programmieren.
Es ist ja nicht so das Elektrotechnik für mich neuland ist, arbeite 
schon länger mit Schaltplänen und löte auch gern. (bin 
Kfz-Mechatroniker), nur µC sind für mich neu.

Werde deinen Vorschlag mit C aber mal probieren.

ISP-Programmiertakt ist laut Atmel Studio 57,6kHz, die gibt er mir vor.
Der mySmartUSB light ist als STK500 eingebunden.
Ich benutze zur Zeit das interne Quarz, weil ich nicht unnötig in die 
Fusebits eingreifen möchte und das Risiko gering halten möchte.

Bei 1MHz internen Takt dürfte ich max. 250kHz haben. Hm...

Zwischen Pin 20 und 22 ist deshalb kein 100nF Kondesator, weil er bei 
Blafusel nicht eingezeichnet ist. Vllt ist hier der Fehler?

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Daniel Briese schrieb:
> Werde deinen Vorschlag mit C aber mal probieren.

C lernen ans sich ist eine gute Idee, aber dein Problem hat mit dem 
Programm und dessen Programiersprache überhaupt nichts zu tun. Der 
Programmer liest falsche Werte aus dem Flash, warum auch immer.

Wenn der verify mal richtig durchläuft, kannst du dich mit dem Programm 
befassen.

Oliver

von Ulrich (Gast)


Lesenswert?

Wenn sich die Chip ID und die Fuse Bits zuverlässig auslesen lassen, 
spricht einiges dafür das die ISP Verbindung im Prinzip funktioniert, 
und auch die Taktfrequenz passt. Wird denn der µC auch als solcher 
erkannt, bzw. ist richtig eingestellt - die Programmieralgorithmen 
(Seitengröße) sind je nach Typ etwas verschieden.

Es könnte ein Problem wie zu lange Kabel geben, so das es halt nicht 
ganz zuverlässig funktioniert.

Die Fuse bits sollte man bei einer nicht zuverlässigen Verbindung auch 
besser erst einmal nicht antasten.

Es könnte ggf. auch noch ein Problem mit der Software im Programmer 
sein, so das es mit dem Auslesen nicht ganz funktioniert. Das Programm 
ist nun auch ausgesprochen kurz - für einen etwas besseren Test könnt 
man mal eine etwas längeres Programm (egal was,  >256 bytes) aufspielen, 
und dann den Flash-inhalt auslesen, und sehen ob da auch nur 0 
zurückkommt.

von Thomas E. (thomase)


Lesenswert?

Daniel Briese schrieb:
> Danke für die sehr schnellen Antworten.
> Da dies mein erstes Programm überhaupt ist und ich mich durchs Tuturial
> hangele, weiß ich nicht, ob es gut ist jetzt auch noch C zu lernen, bzw.
> zu programmieren.
> Es ist ja nicht so das Elektrotechnik für mich neuland ist, arbeite
> schon länger mit Schaltplänen und löte auch gern. (bin
> Kfz-Mechatroniker), nur µC sind für mich neu.
Beim Löten kann man immer Fehler machen. Das passiert jedem.

> Werde deinen Vorschlag mit C aber mal probieren.
das ändert aber nichts daran, dass das Flashen nicht funktioniert

> ISP-Programmiertakt ist laut Atmel Studio 57,6kHz, die gibt er mir vor.
> Der mySmartUSB light ist als STK500 eingebunden.
> Ich benutze zur Zeit das interne Quarz, weil ich nicht unnötig in die
> Fusebits eingreifen möchte und das Risiko gering halten möchte.
> Bei 1MHz internen Takt dürfte ich max. 250kHz haben. Hm...
Das ist alles Ok. Sonst würdest du das andere auch nicht auslesen 
können.
Nebenbei: Es ist kein Quarz- sondern ein RC-Oszillator.

> Zwischen Pin 20 und 22 ist deshalb kein 100nF Kondesator, weil er bei
> Blafusel nicht eingezeichnet ist. Vllt ist hier der Fehler?
Ob es das aktuelle Problem beseitigt, sei mal dahingestellt. Auf jeden 
Fall gehört da einer hin. Beim Blafusel-Schaltplan "I/O-Board Atmega8" 
kann ich übrigends gar keinen Stützkondensator entdecken. Auch nicht auf 
der abgebildeten Platine. Scheint mit vernünftiger Schaltungstechnik 
nicht viel am Hut zu haben der Herr. Also vergiss die website am besten. 
Auf solche Tipps sollte man verzichten.

mfg.

von Conny G. (conny_g)


Lesenswert?

Oliver S. schrieb:
> Daniel Briese schrieb:
>> Werde deinen Vorschlag mit C aber mal probieren.
>
> C lernen ans sich ist eine gute Idee, aber dein Problem hat mit dem
> Programm und dessen Programiersprache überhaupt nichts zu tun. Der

Also ich kam nur auf die Idee, weil ich kürzlich mal was gelesen habe, 
dass in der .hex-Datei auch eine Info ist, ab welchem Offset die Datei 
im Flash abgelegt werden soll.
Und ich arbeite hauptsächlich mit C, also kann ich gerade nicht sagen, 
ob man da mit .asm einen Fehler machen kann oder nicht.
Bei C muss man sich jedenfalls nicht drum kümmern.

An einer Stelle hakte meine Überlegung aber: der Offset, ob gesetzt oder 
nicht, würde natürlich auch beim Verify angewendet - also war mein 
Vorschlag quatsch und er kann sich die C-Variante sparen.

Vermutlich liegt es eher an so etwas wie zu hohem Programmer-Takt.

von Daniel B. (daniel10)


Lesenswert?

Hallo :-)

Mein Programm läuft auf dem ATmega8 :-))) Alle drei LEDs leuchten jetzt.

Hab das Problem gefunden: Hardwareseitig ist alles in Ordnung, 
Softwaretechnisch aber nicht.
Ich benutze Atmel Studio 6.1, dachte es wäre 6.0
Das wird das Problem sein, was es zu lösen gilt.
Ich konnte das Programm im Hex-Format mit myAVR Progtool auf den ATmega8 
übertragen :-)
Bin grad total happy :-)

Nur was mach ich jetzt mit Atmel Studio 6.1 und mysmartUSB light? hm...
Gibt es da Lösungsansätze oder Bugfixes?

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.