Forum: Mikrocontroller und Digitale Elektronik Atmega16 vergisst die Programmierung


von Erne E. (evix)


Lesenswert?

Hallo, bin neu hier und habe schon fragen.

Ich habe das Atmel Eval Board Ver 2.0 von Pollin zusammen gebaut und das 
Testprogramm von deren Seite auf einen Atmega16 geschrieben.

Zum einen hat das fast 1 Stunde gedauert. Dann kam eine Fehlermeldung 
dass das Schreiben nicht geklappt hätte.

Beim Testen hat jedoch LED1 geleuchtet, LED2 hat geleucht und das 
Piepsen über den Summer kamm auch raus, nur die Laufschrift welche man 
über Hypertermial empfangen sollte wurde nicht angezeigt.

Als ich dann jetzt kurz mal den Strom weggenommen habe und ihn dann 
wieder angeschlossen habe war die Programmierung des Atmega weg.

Nun zu meinen Fragen.

Hat der Atmega16 einen flüchtigen Speicher? Ich dachte immer so ein IC 
würde auch nach einen Energieausfall wieder so funktionieren als wäre er 
immer an gewesen. Kann man den nicht rausnehmen und anschliessend wo 
anderes einbauen?

Dauert das Programmieren immer solange? Ich habe irgendwo gelesen das es 
in 20 Sekunden geschehen sein sollte.

Danke für eure Antworten.

von sechsnullfuenf (Gast)


Lesenswert?

Ja, das Programmmieren ist schnell, ein paar sek je nach Typ. Und 
natuerlich nicht fluechtig. Da ist irgendwas ganz falsch. Die pro Bit 
Programmierzeit ist ist je laenger, je kleiner die Versorgungsspannung. 
Ich kenn diesen Aufbau nicht, kann daher nichts dazu sagen.

von Hannes L. (hannes)


Lesenswert?

Womit programmierst Du das Ding?
Hast Du einen vernünftigen externen Programmer oder nutzt Du die auf dem 
Board vorhandene ISP-Schaltung?
Hast Du eventuell ein USB-Seriell-Adapter dazwischen?

...

von peter-neu-ulm (Gast)


Lesenswert?

Damit ein Programm abstürzt, muss nicht das ganze Programm verloren 
sein, die Vernichtung eines einzigen Bit reicht schon aus. Normalerweise 
ist die Programmierung eine Sache von wenigen Sekunden, meist dauert das 
Verifizieren länger, da dann der gesamte Speicherbereich durchgelesen 
wird.
Bei der Fehlerbeschreibung muss irgendwas mit dem Programmieren schief 
laufen. Versuchs doch mal mit der einfachen Schleife:

start:
ser r16
out ddrd,r16   ;portD zum Ausgang machen
schleife:
inc r16
out portd,r16  ;binäre, wachsende Zahl ausgeben
rjmp schleife

die liefert an allen pins von portd eine symmetrische Rechteckspannung, 
also mit UB/2 als Mittelwert, mit von pin zu pin doppelter Frequenz. man 
kann damit die Hardware gut überprüfen.

von Erne E. (evix)


Lesenswert?

Hey, cool. Danke für die schnellen Antworten.

Leider verstehe ich noch nicht soviel vom Programmieren. Also das mit 
der Schleife ist noch ein böhmisches Dorf für mich.

Das Board ist wie schon erwähnt das Atmel Evaluationsboard Version 2.0 
von Pollin. Ich habe einen USB to Serial Adapter (CN-116) von Sitecom.

Programmiert habe ich es über den ISP der auf dem Board drauf ist.

Also Software zum nehme ich PonyProg2000 Version 2.07A Beta

Das Testprogamm hatte ich mir von der Pollin Homepage runtergeladen und 
auf den IC draufgespielt.

Ich verstehe auch nicht warum der Lauftext im Hyperterminal nicht zu 
sehen war.

Was mich jedoch gefreut hat dass das Programm teilweise funktioniert 
hatte.
Ich schon irgendwie ein tolles Gefühl wenn die Geräte arbeiten, auch 
wenns nur soetwas banales wie eine LED zum leuchten zu bringen ist.

Ich habe hier noch einen alten Rechner mit einem echten Com-Port. Meint 
ihr das es damit besser geht?

von Hannes L. (hannes)


Lesenswert?

peter-neu-ulm wrote:
> Damit ein Programm abstürzt, muss nicht das ganze Programm verloren
> sein, die Vernichtung eines einzigen Bit reicht schon aus. Normalerweise
> ist die Programmierung eine Sache von wenigen Sekunden, meist dauert das
> Verifizieren länger, da dann der gesamte Speicherbereich durchgelesen
> wird.

Ich vermute, dass da Bitbanging über USB gemacht wurde.

> Bei der Fehlerbeschreibung muss irgendwas mit dem Programmieren schief
> laufen. Versuchs doch mal mit der einfachen Schleife:
>
> start:
> ser r16
> out ddrd,r16   ;portD zum Ausgang machen
> schleife:
> inc r16
> out portd,r16  ;binäre, wachsende Zahl ausgeben
> rjmp schleife
>
> die liefert an allen pins von portd eine symmetrische Rechteckspannung,
> also mit UB/2 als Mittelwert, mit von pin zu pin doppelter Frequenz. man
> kann damit die Hardware gut überprüfen.

Soweit ist Erne noch nicht, er kämpft noch nir dem "Testprogramm", das 
er sich bei Pollin runtergeladen hat:

>> Ich habe das Atmel Eval Board Ver 2.0 von Pollin zusammen gebaut und das
>> Testprogramm von deren Seite auf einen Atmega16 geschrieben.

...

von Holger K. (krulli) Benutzerseite


Lesenswert?

Erne E. wrote:
> Dauert das Programmieren immer solange? Ich habe irgendwo gelesen das es
> in 20 Sekunden geschehen sein sollte.

Denn hast Du bestimmt auch gelesen, das dass Pollinboard nicht grad für 
die USB Schnittstellenwandler geeignet ist? Das ist hier jede Woche 
Thema ;-)
Versuch es mal mit einer "echten" Seriellen Schnittstelle. Da dauert das 
programmieren nur einige Sekunden.

>Ich verstehe auch nicht warum der Lauftext im Hyperterminal nicht zu
>sehen war.

Offensichtlich hast Du die Fusebits nicht angepasst. Schau mal in die 
pdf von Pollin. Dein Mega16 wird wahrscheinlich noch mit 1MHz laufen, 
statt mit den geforderten 8 MHz. Aber lese die Fusebits mit "Read" 
vorher ein, bevor du was dran veränderst.

Gruß
Holger

von Erne E. (evix)


Lesenswert?

Was mir aufgefallen ist, das ich in Pony nicht in "SI Prog I/O" 
auswählen kann, es geht nur "SI Prog API" oder "JDM API"

Hatte gerade nochmal das Programm aufgespielt (5min) und dann das 
Verifizieren abgebrochen (hätte 30min gedauert), jetzt tut sich jedoch 
nichts. Muss man Verifzieren? oder habe ich den Atmega16 schon zerstört? 
Meint Ihr das es mit dem Atmage32 besser klappen könnte?

von Holger K. (krulli) Benutzerseite


Lesenswert?

Erne E. wrote:
> Meint Ihr das es mit dem Atmage32 besser klappen könnte?
Nein!
> Muss man Verifzieren?
Auch nein. Wäre aber besser.
> oder habe ich den Atmega16 schon zerstört?
zerstört werden die nicht wirklich.
Allerdings kann es vorkommen, das man die Controller durch falsche 
programmierung der Fusebits "abschießt". Aber das ist aber "reperabel"

von Hannes L. (hannes)


Lesenswert?

Sorry, ich habe diesen Beitrag gestern Abend übersehen...

Erne E. wrote:
> Hey, cool. Danke für die schnellen Antworten.
>
> Leider verstehe ich noch nicht soviel vom Programmieren. Also das mit
> der Schleife ist noch ein böhmisches Dorf für mich.
>
> Das Board ist wie schon erwähnt das Atmel Evaluationsboard Version 2.0
> von Pollin.

Nunja, das ist nicht das Schlechteste, wenn auch nicht das Optimale...

> Ich habe einen USB to Serial Adapter (CN-116) von Sitecom.

Da liegt der Hase im Pfeffer. Der (sogenannte) "Programmer" auf dem 
Pollin-Board arbeitet mit Bitbanging. Das heißt, dass der PC das Timing 
machen muss. Dies kann der PC nur mit "echten" Schnittstellen (am ISA- 
bzw. PCI-Bus), über USB wird das Timing stark gestört weil jedes Bit 
erst in ein USB-Paket verpackt und nach "USB-Fahrplan" irgendwann mal 
versendet wird. Die meisten USB-Seriell-Adapter können das gar nicht, 
andere sind extrem langsam. Das liegt aber an der Natur des USB. USB ist 
nunmal für den (schnellen) Transport großer (Multimedia-)Datenmengen 
konzipiert, nicht für Bitwackeln in Echtzeit.

>
> Programmiert habe ich es über den ISP der auf dem Board drauf ist.

Der hat keine eigene Intelligenz und macht Bitbanging...

>
> Also Software zum nehme ich PonyProg2000 Version 2.07A Beta
>
> Das Testprogamm hatte ich mir von der Pollin Homepage runtergeladen und
> auf den IC draufgespielt.
>
> Ich verstehe auch nicht warum der Lauftext im Hyperterminal nicht zu
> sehen war.

Na weil Deine Baudrate nicht stimmt. Die serielle Schnittstelle braucht 
einen sehr genauen und vor allem sehr stabilen Takt. Dazu muss man den 
AVR mit einem Quarz takten. Sehr gut geeignet sind sogenannte 
Baudratenfrequenzen (siehe die Tabellen in den Datenblättern der AVRs im 
Kapitel U(S)ART). Nun werden aber die AVRs mit aktiviertem internen 
RC-Oszillator ausgeliefert. Du kanns also soviele Quarze anschließen wie 
Du willst, das interessiert den AVR nicht, solange Du den Quarz nicht 
beim AVR anmeldest. Dies geschieht über die Fusebits. Doch Vorsicht, 
daran sollte man sich erst vergreifen, wenn man das dazu erforderliche 
Wissen hat, ansonsten sperrt man sich schnell mal aus. Die Fusebits sind 
also keine "Spielwiese" zum Experimentieren. Einzelheiten findes Du im 
Datenblatt des betreffenden AVRs.

>
> Was mich jedoch gefreut hat dass das Programm teilweise funktioniert
> hatte.

Es funktioniert ja, aber es läuft mit einem Takt, der für die serielle 
Schnittstelle ungeeignet ist.

> Ich schon irgendwie ein tolles Gefühl wenn die Geräte arbeiten, auch
> wenns nur soetwas banales wie eine LED zum leuchten zu bringen ist.

Ja, schon, aber nicht übermütig werden. Das ist erst der Anfang.

>
> Ich habe hier noch einen alten Rechner mit einem echten Com-Port.

Und warum benutzt Du den nicht??

> Meint
> ihr das es damit besser geht?

Aber selbstverständlich geht der besser!!!
Wenn Du dann noch dafür sorgst, dass keine unnötige Software im 
Hintergrund läuft, dann funktioniert das richtig gut und auch schnell.
Allerdings wird dadurch alleine die serielle Schnittstelle auch nicht 
die richtige Baudrate bekommen... ;-)

...

von Erne E. (evix)


Lesenswert?

So, hab jetzt einen echten Com-Port und muss sagen. UNGLAUBLICH wie 
schnell das geht :-)

Leider schreibt er mir immer noch das ein Schreibfehler aufgetreten ist.
Kamm nur einmal das alles okey gewesen sein soll. Hyperterminal empfängt 
leider immer noch nicht den Text.

Hab einen Atmega8 aufs Board gesetzt und beschrieben, da kommt dann 
immer das alles Okay gewesen ist.

Meine Frage wäre jetzt. Auf dem Atmega16 kommt wird der Ton für 0,5 
Sekunden ausgegeben. Mit dem Atmega8 ertönt er aber für 3-4 Sekunden. 
Ist das normal? Kann es sein das der 8er langsamer arbeitet als der 16? 
Ich dachte immer das wäre vom Quarz abhängig wie schnell die seien.

Zumindest vergisst der IC jetzt nicht mehr das er beschrieben wurde. 
Habe den Strom mal ausgestellt und wieder angemacht und die 
Programmierung war immer noch vorhanden.

von Hannes L. (hannes)


Lesenswert?

Erne E. wrote:
> So, hab jetzt einen echten Com-Port und muss sagen. UNGLAUBLICH wie
> schnell das geht :-)

Naja, schnell und zuverlässig ist Zweierlei... ;-)
Pony arbeitet gerne am Limit, also an der Grenze der Zuverlässigkeit.

>
> Leider schreibt er mir immer noch das ein Schreibfehler aufgetreten ist.
> Kamm nur einmal das alles okey gewesen sein soll.

Dann wird Pony am Limit arbeiten.

> Hyperterminal empfängt
> leider immer noch nicht den Text.

Der Text wird erst korrekt gesendet (Timing), wenn Quarz und 
UART-Einstellung (im AVR-Programmm) zusammenpassen und der AVR den Quarz 
auch nutzt (Fusebiteinstellung).

>
> Hab einen Atmega8 aufs Board gesetzt und beschrieben, da kommt dann
> immer das alles Okay gewesen ist.
>
> Meine Frage wäre jetzt. Auf dem Atmega16 kommt wird der Ton für 0,5
> Sekunden ausgegeben. Mit dem Atmega8 ertönt er aber für 3-4 Sekunden.
> Ist das normal?

Jain, aber das erklärt Einiges...
Schau mal in die Datenblätter der Controller in das Kapitel 
Clock-Sources. Da wirst Du sehen, dass die AVRs mit intern erzeugtem 
Takt von 1MHz, 2MHz, 4MHZ und 8MHz laufen können, aber auch mit externem 
Quarz, externem Keramik-Resonator, externem RC-Oszillator oder auch mit 
einem extern vorhandenem Takt.

> Kann es sein das der 8er langsamer arbeitet als der 16?

Wenn dasselbe Programm auf den Controllern unterschiedlich schnell ist, 
dann sind sie halt unterschiedlich eingestellt. Die Einstellung erfolgt 
mit den Fusebits, das bedarf aber Fachkenntnis, Du wärst nicht der 
Erste, der sich den AVR versaut, ehe das erste Programm darin korrekt 
gelaufen ist...

> Ich dachte immer das wäre vom Quarz abhängig wie schnell die seien.

Richtig, dazu muss der AVR aber erstmal auf Quarzbetrieb umgestellt 
werden. Und da es noch viele andere Taktquellen außer Quarz in Deinem 
Frequenzbereich gibt, kann man dabei viel falsch machen. Besonders 
wichtig soll bei Pony wohl sein, dass man vor jeder Fusebit-Manipulation 
die Fuses manuell einliest und dann mit dem Datenblatt vergleicht. 
Wichtig ist das deshalb, weil nicht jeder Pony-Anfänger die invertierte 
Funktion der Fuses gleich versteht. Missverständnisse sind da 
vorprogrammiert, und dann ist das Geschrei meist groß (haben wir hier 
fast jede Woche ein paar Fälle).

>
> Zumindest vergisst der IC jetzt nicht mehr das er beschrieben wurde.
> Habe den Strom mal ausgestellt und wieder angemacht und die
> Programmierung war immer noch vorhanden.

Naja, das kann ich nicht nachvollziehen, das halte ich für einen Irrtum 
Deinerseits. Bei mir hat noch kein AVR seinen Flash-Inhalt vergessen. 
Wobei ich aber auch nie versucht habe, Bitbanging-ISP über USB zu 
machen...

...

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.