Hallo zusammen,
bis ich gemerkt hatte, dass ich einen Programmierfehler gemacht habe,
dacht ich, dass mein Programmiergerät defekt ist. Dann baute ich mir ein
Testgerät für den 2313 mit seriellem Anschluss. Mit einigen
Printbefehlen im Programm stellte ich fest, dass die falsch
programmierten 2313 nach dem !Sleep-Befehl einschlafen und nicht wieder
aufwachen. Gibt es eine Möglichkeit, sie wieder programmieren zu können?
Vielen Dank
Klaus-Peter
Ich hatte schon mal das Programm mit !Sleep am laufen. Es ist auch
gelaufen und wieder aufgewacht. Was ich daran geändert habe weis ich
dummerweise nicht mehr. Seither kann ich einen neuen 2313 programmieren.
Ich habe viele der Befehle getestet und er lies sich immer wieder
programmieren. Erst als ich den Befehl !Sleep einfügte war es
anschliesend aus. Das Programm läuft bis zu diesem Bfehl, bleibt stehen
und nichts geht mehr.
Nochmal: Das alles hat nichts mit der Programmierung über ISP zu tun!
Wenn der Programmer auf den µC zugreift, dann resettet er als erstes den
µC. Der arbeitet dann nicht dein Programm ab. Und nein: dagegen kann er
sich auch nicht wehren.
Karl Heinz Buchegger schrieb:> Nochmal: Das alles hat nichts mit der Programmierung über ISP zu tun!
Alles schön und gut, aber was kann ich tun um die 2313 wieder
programmieren zu könne? Sie sind ja nicht kaputt, das Programm läuft ja
nach einem Reset wider bis zum !Sleep
Peter II schrieb:> Karl Heinz Buchegger schrieb:>> Und nein: dagegen kann er>> sich auch nicht wehren.>> doch, Reset Disable (gut das geht nicht per Software)
Ja, und wenn die Taktquelle verfust ist, geht auch nichts mehr.
Aber davon gehe ich bei der Beschreibung im Eröffnungsposting nicht aus.
Klaus-Peter schrieb:> Karl Heinz Buchegger schrieb:>> Nochmal: Das alles hat nichts mit der Programmierung über ISP zu tun!>> Alles schön und gut, aber was kann ich tun um die 2313 wieder> programmieren zu könne?
Nun mal langsam.
Erst mal ist deine Fehlerbeschreibung mehrdeutig.
Kannst du ein neues Programm in deine 2313 brennen oder kannst du das
nicht?
Du musst die beiden Dinge trennen:
Das eine ist das Brennen eines neuen Programmes in den 2313. Das hat
nichts damit zu tun, welches Programm gerade auf dem 2313 läuft oder
welches Programm du in den 2313 brennen willst.
Das andere ist, was dann dieses Programm macht. Da kommt dann dein Sleep
ins Spiel. Wenn das dein Problem ist, dann hast du einfach nur einen
Programmfehler, den du beheben musst.
Dieser Fall hat aber wiederrum nichts mit deinem Programmiergerät zu
tun.
Also Karl-Heinz, ich bewundere Deinen Umgang mit bornierten
Fragestellern.
Hätte der TO seinen Code eingestellt, hätte ihm längst jemand sagen
können, wo's hakt. Denn genau das wird's sein, solange er nicht an den
Fuses rumpfuscht und den µC damit himmelt, ist einfach nur der Quellcode
fehlerhaft.
Karl Heinz Buchegger schrieb:> Das andere ist, was dann dieses Programm macht. Da kommt dann dein Sleep> ins Spiel. Wenn das dein Problem ist, dann hast du einfach nur einen> Programmfehler, den du beheben musst.> Dieser Fall hat aber wiederrum nichts mit deinem Programmiergerät zu> tun.
Mein Programmiergerät ist in Ordnung, ich kann damit ein neues IC
programmieren. Wenn ein Programm ohne diesen Befehl geladen ist, lasst
es sich auch wieder neu programmieren. Nur wenn dieser !Sleep-Befehl
drin ist, geht nichts mehr. Ich habe nichts mit den Fsebits gemacht.
Aber bei all den Versuchen "schlafen" jetzt schon 6 ATTiny2313 bis ich
heraus gefunden habe wann sie das machen.
Zeig doch einfach mal dein Programm was ist den ein "!Sleep" Befehl?
Versuchsweise kannst du den ResetPin mal dauerhaft auf GND legen und
schauen ob dann der Programmer wieder darauf zugreifen kann.
Wenn du mit dem Programmer nicht mehr zugreifen kannst, solltest du dich
mit dem Gedanken vertraut machen, dass beim Programmiervorgang selbst
irgendetwas schief gegangen ist.
Du suchst an der falschen Stelle. Selbst mit dem größten Unsinn kannst
du deinen 2313 nicht so programmieren, dass du mit dem Programmer nicht
mehr rann kannst.
(Du benutzt aber schon einen richtigen ISP Programmer und nicht zb einen
Bootloader?)
Läubi .. schrieb:> Versuchsweise kannst du den ResetPin mal dauerhaft auf GND legen und> schauen ob dann der Programmer wieder darauf zugreifen kann.
Das mit dem Dauerreset kann ich mal probieren. Vielen Dank für Eure
Anteilname. Ich muss jetzt weg, arbeiten. Bin morgen Abend wieder im
Netz.
Kontaktprobleme oder zu hohe ISP-Geschwindigkeit kann die Fuses so
verstellen, dass Du Dich aussperrst. Versuchsweise kannst Du einen Takt
>1Mhz an XTAL1 anschließen und gucken, ob Du dann wieder an den
Controller kommst.
Karl Heinz Buchegger schrieb:> Du suchst an der falschen Stelle. Selbst mit dem größten Unsinn kannst> du deinen 2313 nicht so programmieren, dass du mit dem Programmer nicht> mehr rann kannst.
Es tät' noch die Möglichkeit des Setzens der Fuses über ein .elf-File
geben, und damit sozusagen die Himmelung bei jedem Programmiervorgang.
Nur statt mit Info's rauszurücken, Typ und SW des Programmierers,
Umgebung, Board usw., muss man wieder alles aus der Nase des geschätzten
Fragenden ziehen.
MWS schrieb:> Nur statt mit Info's rauszurücken, Typ und SW des Programmierers,> Umgebung, Board usw., muss man wieder alles aus der Nase des geschätzten> Fragenden ziehen.
Infos:
Programmiergerät:BASCOM USB ISP Programmer, mit dem ich schon die
unterschiedlichsten ATMEL ohne Probleme geladen habe. Sowohl auf dem
Testboard von Roland Walter als auch auf meinem Eigenbau.
Testboard:Eigenbau, auf dem ich schon verschiedene ATiny2313
programmiert habe und die alle ohne Probleme laufen und sich auch wieder
neu laden lassen.
Programm:Im Anhang
Welcher fehler wird den angezeigt ????
wenn der fehler angezeigt wird dann haste warscheinlich einen von den
ISP pinnen an deinen attiny2313 falsch beschaltet oder noch was
angschlossen was zu niederohming ist.
Mfg Kannnix
Neueste Erkenntnisse: Die Nummer mit dem Dauaerreset beim Starten hat
funktioniert, aber nur einmal. Nachdem ich ein weiteres Mal das
Sleep-Programm geladen hatte kam die Meldung:Difference at000003.
Ein weiterer Versuch brachte die Meldung:
could not identify chip with ID:ffffff.
Es lies sich nicht mehr löschen. Jetzt geht mit diesem "2313 gar nichts
mehr. Ich etwas vorsichtiger geworden, ich hab es nur noch mit zwei IC's
versucht, mit dem gleichen Ergebnis.
Kannnix schrieb:> wenn der fehler angezeigt wird dann haste warscheinlich einen von den> ISP pinnen an deinen attiny2313 falsch beschaltet oder noch was> angschlossen was zu niederohming ist.
Außer dem Ziel-IC ist nichts angeschlossen. Und alle anderen Programme
die ich lade laufen wie auch das gepostete ohne !Sleep. Wenn ich das
lade, läuft es bis zum Befehl !Sleep und bleibt stehen. Wenn ich mit
INT0 "Stellen" auslöse kommen erst einige Hiroglyphen und dann läuft das
Programm weiter bis zum nächsten !Sleep. Aber neu laden lässt es sich
dann nicht mehr.
Noch was zu den Printbefehlen: Damit kann ich im Terminalprogramm von
Bascom verfolgen was passiert, oder wo er hängen bleibt. Die fallen dann
im Original weg.
Für die mangelhafte Information am Anfang bitte ich um Verzeihung, ich
bin nicht sehr erfahren im Umgang mit Foren. Bis jetzt haben mir
einschlägige Literatur und die Datenblätter weiter geholfen.
Klaus-Peter schrieb:> Außer dem Ziel-IC ist nichts angeschlossen. Und alle anderen Programme> die ich lade laufen wie auch das gepostete ohne !Sleep. Wenn ich das> lade, läuft es bis zum Befehl !Sleep und bleibt stehen.
Du hast, jedenfalls was vom Screenshot zu sehen ist, keine Stackwerte
definiert. Das ist einer der Fehler-Klassiker. Es ist auf dem Bild auch
kein Sleep zu sehen, deshalb wie schon geraten, als Datei anhängen.
Nur - das Programm kann so falsch sein wie es nur will, deswegen
funktioniert die Programmierung immer wieder, außer:
- Kontaktprobleme
- störende Bauteile an den Programmierpins
- falsches Setzen der Fuses
- in extremen Fällen Verfusen des µCs wegen Punkt 1 oder 2
MWS schrieb:> Du hast, jedenfalls was vom Screenshot zu sehen ist, keine Stackwerte> definiert. Das ist einer der Fehler-Klassiker. Es ist auf dem Bild auch> kein Sleep zu sehen, deshalb wie schon geraten, als Datei anhängen.
Sorry, ich hab gar nicht gemerkt, dass da noch einiges fehlt. So wie es
dargestellt ist, läuft das Programm einwandfrei und das IC lässt sich
auch immer wieder neu laden. Nur wenn der !Sleep-Befehl freigeschaltet
ist kann ich das Programm laden und es läuft bis zum !Sleep. Mit einem
Hardwarerest startet das Programm auch wieder. Mit dem INT0 zeigt das
Terminalprogramm etwa 10 Hiroglyphen und dann wider "schlafen".
ImScreenshot Sleep_test4 ist der Terminalausdruck des Programms mit
!Sleep, gestartet mit INT0.
Klaus-Peter schrieb:> noch ein screenshot
Will hier keiner... - Denn wie soll man damit das Programm in Bascom
laden und debuggen? Du sollst den Quelltext als Textdatei anhängen.
...
spess53 schrieb:> Das ist keine Salami, die man scheibchenweise serviert. Ist es so> schwer, dein Programm anzuhängen?
Leute ich bin 70 und froh, dass ich da überhaupt durchblicke. Meine
Versuche, alle auf einmal anzuhängen haben nichts gebracht.
Wahrscheinlich habe ich nicht lange genug gewartet bis das Bild
angehängt war und ein Wartesignal habe ich auch nicht entdeckt, sorry!
Peter, bitte hänge die Datei mit dem Namen "Sleep_Test.bas" an, die sich
im Ordner "C:\Users\Peter\1-Minutentakt" befindet.
Ähhh, ich bin auch schon lange keine 60 mehr...
...
Hannes Lux schrieb:> Will hier keiner... - Denn wie soll man damit das Programm in Bascom> laden und debuggen? Du sollst den Quelltext als Textdatei anhängen.
Ich versuchs mal in WORD.
Klaus-Peter schrieb:> Nur wenn der !Sleep-Befehl freigeschaltet> ist kann ich das Programm laden und es läuft bis zum !Sleep. Mit einem> Hardwarerest startet das Programm auch wieder.
Das ist aber jetzt was anderes als "schläft und lässt sich nicht mehr
programmieren"
Dein Programm ist einfach falsch, nix weiter. Nur wenn Du weiter die
ignorierst, die Dir helfen sollen, dann wirst Du das wohl selbst
austüfteln dürfen.
Kein Mensch will Screenshots, wenn's eine Textdatei verfügbar ist.
Hannes Lux schrieb:> Peter, bitte hänge die Datei mit dem Namen "Sleep_Test.bas" an, die sich> im Ordner "C:\Users\Peter\1-Minutentakt" befindet.
ok, das war mal ein guter Rat,danke
MWS schrieb:> Das ist aber jetzt was anderes als "schläft und lässt sich nicht mehr> programmieren"> Dein Programm ist einfach falsch, nix weiter. Nur wenn Du weiter die> ignorierst, die Dir helfen sollen, dann wirst Du das wohl selbst> austüfteln dürfen.
Toll!
Du hast das Datenblatt gelesen ?
"Standby mode is only recommended for use with external crystals or
resonators."
Und wenn Du PCInts nutzen willst, musst Du das PCMSK-Register setzen.
Ohne wacht da nix auf. Wenn's denn über den PCInt aufwachen soll.
Ansonsten etwas durcheinander das Ganze.
Hannes Lux schrieb:> Du hast Int0 und PCI aktiviert, aber nur für Int0 einen Int-Handler> On Timer1 Ontimer1 'Timer1-Overflow-Interrupt-Routine> On Int0 Stellen 'Zum Überbrücken der Zeitschleife>> Deine Warteschleifen gefallen mir auch nicht.
Die Warteschleifen und die Printbefehle sind nur zum beobachten. Wen
alles richtig läuft fallen die alle raus.
Das mit dem Timer1 zum Aufwecken hab ich so gemacht, weil der länger
zählt bis er überläuft. Ob und wie das funktioniert wollte ich ja
testen. Dazu aber muss ich ihn ja erst mal Schlafen legen. Und das ist
die Krux, weil danach nichts mehr geht.
MWS schrieb:> Du hast das Datenblatt gelesen ?> "Standby mode is only recommended for use with external crystals or> resonators."
ich hab den Idlemode gewählt.Mcucr = &B01100000
Klaus-Peter schrieb:> ich hab den Idlemode gewählt.Mcucr = &B01100000
Nein, das ist Standby und beiläufig ist die Binär-Schreibweise ein
Graus.
Das geht besser.
MWS schrieb:> Nein, das ist Standby und beiläufig ist die Binär-Schreibweise ein> Graus.> Das geht besser.
ok,Dum hast recht, aber das ändert nichts an der Tatsache, dass egal wie
ich MCUCR einstelle, nach dem Laden mit !Sleep keine weiteren Ladungen
möglich sind.
Für mich ist der Binärcode übersichtlicher.
MWS schrieb:> Und wenn Du PCInts nutzen willst, musst Du das PCMSK-Register setzen.
Ich dachte, wenn ich Pcmsk = &B00000001 setze, dann wird PB0
(PCINT0)angesprochen. Was fehlt da noch?
Klaus-Peter schrieb:> Für mich ist der Binärcode übersichtlicher.
Wäre es das, hättest Du den Fehler nicht gemacht.
Es gibt für Deinen Zweck den Befehl: POWER IDLE
MWS schrieb:> Klaus-Peter schrieb:>> ich hab den Idlemode gewählt.Mcucr = &B01100000>> Nein, das ist Standby
Weder noch, das ist der zweite Power-Down-Mode... ;-)
>und beiläufig ist die Binär-Schreibweise ein> Graus.> Das geht besser.
Stimmt:
Mcucr = Bits(sm1,se) 'Sleep im Mode Power-Down voreinstellen
...
Klaus-Peter schrieb:> Was fehlt da noch?
Eigentlich gar nix, es ist was zuviel...
Pinchange-Int und Ext-Int (im Level-Mode) sind Zweierlei. Du brauchst
(wenn überhaupt) nur einen von Beiden.
Aber auch Dein ganzes Konzept ist sehr diffus. So richtig verstehe ich
nicht, was das werden soll.
...
Klaus-Peter schrieb:> Ich dachte, wenn ich Pcmsk = &B00000001 setze, dann wird PB0> (PCINT0)angesprochen. Was fehlt da noch?
Ja, musst es aber auch in Deinen Code reinschreiben.
Stacks und Frame fehlt immer noch.
Hannes Lux schrieb:>>und beiläufig ist die Binär-Schreibweise ein>> Graus.>> Das geht besser.>> Stimmt:>> Mcucr = Bits(sm1,se) 'Sleep im Mode Power-Down voreinstellen
Ich seh schon, da muss ich noch einiges dazu lernen. Allerdings habe ich
für meine Brennwertterme von Herrmann (vielleicht kennt die ja einer und
auch den Murks) eine neue Steuerung gebaut mit einem ATMEGA8 und einen
Tempomat für meinen VW Bus auch mit dem MEGA8. Beide funktioniren
einwandfrei. Auch das leidige Sleepprogramm läuft auf einem MEGA88
anstandslos. Erst als ich versuchte es auf den 2313 umzuschreiben
klemmte es.
Hannes Lux schrieb:> Aber auch Dein ganzes Konzept ist sehr diffus. So richtig verstehe ich> nicht, was das werden soll.
Ich hab eine Slaveuhr oder wie man das nennt. Die braucht alle Minute
einen Impuls von 12V, allerdings jedesmal mit anderer Polung. Sie soll
mit Batterie laufen und das tut sie auch. Aber ich wollte Strom sparen.
Die Ausgänge PB2,PB3 schalten die Polung um umd dann bringt PB4 die
Spannung, alles über Relais. Die Zeiten sind freilich viel zu lang. Sie
sind es nur zum besseren Beobachten.
Hannes Lux schrieb:> MWS schrieb:> Nimmt dann nicht der Compiler die voreingestellten Werte?
Ja, aber die Voreinstellung ist recht klein, wenn ISRs drin sind, dann
ist das zuwenig
MWS schrieb:> Es gibt für Deinen Zweck den Befehl: POWER IDLE
In meinem ersten Bascomprogramm (Demo) hatte ich eine komplette Liste
aller Befehle.Um nicht durcheinander zu kommen habe ich es entfernt, als
ich mir die Vollversion gekauft hatte. Abgesehen davon, dass ich mich
erst wieder darin zurecht finden musste fand ich diese Liste nicht mehr.
MWS schrieb:> wenn ISRs drin sind, dann> ist das zuwenig
Jaaaa, stimmt ja, diese riesigen Push/Pop-Orgien...
Also geht's jetzt nicht nur um die Einträge, sondern vor allem auch um
die richtige Anpassung der Einträge (viel HW-Stack wegen der
Registersicherung, wenig SW-Stack wegen geringer Parameterübergabe und
wenig Framesize, da keine Funktionen rechnen müssen...).
Nunja, ich werkele meist in ASM, in Bascom nur ganz selten.
...
Hannes Lux schrieb:> Stimmt:>> Mcucr = Bits(sm1,se) 'Sleep im Mode Power-Down voreinstellen
Also bei meinem Tiny2313 Datenblatt entspricht SM1=1 SM0=0 dem Standby
Mode, was verwendest Du für ein DB ?
MWS schrieb:> Ja, aber die Voreinstellung ist recht klein, wenn ISRs drin sind, dann> ist das zuwenig
HW Stack = 40; Softstack = 16; Framesize = 32. Wie erkenne ich wie groß
die Werte mindestens sein müssen?
Hannes Lux schrieb:> Jaaaa, stimmt ja, diese riesigen Push/Pop-Orgien...>> Also geht's jetzt nicht nur um die Einträge, sondern vor allem auch um> die richtige Anpassung der Einträge (viel HW-Stack wegen der> Registersicherung, wenig SW-Stack wegen geringer Parameterübergabe und> wenig Framesize, da keine Funktionen rechnen müssen...).
Und das alles nur wegen des !Sleep? Denn ohne läuft das Programm ja.
Übrigens, der Interupt, der jetzt noch mit dem TIMER1 ausgelöst werden
soll wird nachher von einem DTF-Modul gesendet. Das ist dann das nächste
Problem.
Klaus-Peter schrieb:> Ich hab eine Slaveuhr
Kenne ich als Nebenuhr, das ist aber über 40 Jahre her... ;-)
> oder wie man das nennt. Die braucht alle Minute> einen Impuls von 12V, allerdings jedesmal mit anderer Polung.
Richtig.
> Sie soll> mit Batterie laufen und das tut sie auch. Aber ich wollte Strom sparen.
Die Uhr (die im AVR) braucht Quarz und Timer. Da ist nix mit
Stromsparen. Da geht nur der Idle-Mode und der spart kaum Strom.
Power-Down schaltet den Takt ab und damit auch den Timer...
> Die Ausgänge PB2,PB3 schalten die Polung um umd dann bringt PB4 die> Spannung, alles über Relais.
Etwas umständlich, eine H-Brücke (auch mit 2 Relais mit je 1 Wechsler
möglich) hätte da gereicht. Also ein Pin für sorum und einer für rosum.
Diese werden abwechselnd alle 60 Sekunden eingeschaltet und ein paar
Zehntelsekunden später wieder aus.
Ich würde mittels Timer im CTC-Mode eine Zeitbasis von 1 ms generieren.
In dessen ISR würde ich einen Countdown (Word-Variable) von 60000
herunterzählen.
Bei 0 wird der Startwert gesetzt und eine Bitvariable getoggelt. Dann
wird anhand des Bitzustandes der eine oder andere Relaisausgang
eingeschaltet und ein weiterer Countdown (Bytevariable) auf Startwert
(Anzahl der Millisekunden, die das Relais eingeschaltet bleiben soll)
gesetzt.
Zusätzlich wird in der Timer-ISR dieser Count-Down geprüft (ob er >0
ist) und wenn aktiv (also >0) heruntergezählt. Erreicht er 0, dann
werden beide Relaisausgänge ausgeschaltet (ist billiger als wenn man
erst prüfen müsste, welcher gerade aktiv ist).
> Die Zeiten sind freilich viel zu lang. Sie> sind es nur zum besseren Beobachten.
Ja klar, aber Warteschleifen im Sekundenbereich in einer ISR, da bekomme
ich Magenkrämpfe...
...
Klaus-Peter schrieb:> HW Stack = 40; Softstack = 16; Framesize = 32. Wie erkenne ich wie groß> die Werte mindestens sein müssen?
Sollte reichen. Wie erkennen ? Teils Erfahrung, gibt auch ANs dazu im
MCS- Forum. Eine ISR benötigt 26 der 40 Bytes HW-Stack.
Wie weit ist denn das Problem der Nichtmehrneuprogrammierbarkeit
gediehen ?
MWS schrieb:> was verwendest Du für ein DB ?
2543I–AVR–04/06
Ist zwar nicht ganz taufrisch der Tiny2313 aber auch nicht. Warum sollte
sich da inzwischen etwas geändert haben? Mir sind bei meinen
Tiny2313-Basteleien noch keine Unstimmigkeiten gegenüber diesem DB
aufgefallen. Da ich fast immer einen Timer verwende, nutze ich natürlich
keinen Tiefschlaf-Modus.
...
---
Changes from Rev.
2543H-02/05 to
Rev. 2543I-04/06
Updated “Power Management and Sleep Modes” on page 30
---
Hmmm! "Updated" ist aber dann nett ausgedrückt.
Klaus-Peter schrieb:> Und das alles nur wegen des !Sleep? Denn ohne läuft das Programm ja.
Das halte ich für einen Irrtum...
> Übrigens, der Interupt, der jetzt noch mit dem TIMER1 ausgelöst werden> soll wird nachher von einem DTF-Modul gesendet.
Das würde ich nicht so machen, dazu ist der DCF77-Empfang zu
störanfällig. Ich würde also erstmal eine freilaufende Quarzuhr
programmieren, die dann gelegentlich das "DCF77-Radio" einschaltet, die
Signale liest, decodiert und auf Plausiblität prüft (mehrere Datensätze
lang) und dann "die Uhr trimmt", indem der Startwert für den
Minuten-Countdown leicht korrigiert wird. Dazu muss die "Quarzuhr"
natürlich nicht nur die Minutenimpulse generieren, sondern auch die Zeit
mitzählen, damit sie weiß, wie spät es ist und die Korrektur sauber
berechnen kann.
> Das ist dann das nächste> Problem.
Dazu kommt noch, dass einige DCF77-Module keinen sauberen
100ms/900ms-Impuls abgeben, sondern einschwingen und ausschwingen. Dann
verarscht sich der Interrupt und zählt die Sekunde mehrfach. Ich würde
deshalb den DCF-Eingang wie einen Taster entprellen, allerdings etwas
schneller. Auch dies würde ich den Timer-Interrupt nebenbei mit
erledigen lassen.
Aber, ich muss das Ding nicht bauen und werde Dir nicht vorscheiben, wie
Du es realisieren sollst. Es reicht, wenn Du mal über Alternativen
nachdenkst. Viel Erfolg...
...
MWS schrieb:> Aber schau das hier an:
Danke, ist ersetzt... - Aber etwas dreist ist das schon, oder?
Tut aber nix zur Sache, Timer laufen weder im Power-Down noch im
Standby. Das wäre mir also auch zukünftig nicht aufgefallen.
...
MWS schrieb:> Wie weit ist denn das Problem der Nichtmehrneuprogrammierbarkeit> gediehen ?
Genau und nur um das geht es mir eigentlich. Auch wenn Ihr es nicht
glaubt, meine Programme laufen, alle. Nur jetzt komme ich nicht weiter,
weil jeder Versuch mit "!Sleep" zu arbeiten meine IC's himmelt. Ob das
Programm nun der Norm von Profis entspricht weis ich nicht. BASCOM hab
ich zufällig gefunden und ich war neugierig ob ich damit was anfangen
kann. Und da die Atmels wirklich preiswert sind fing ich vor etwa 2
Jahren an, es auszuprobieren. Sicher könnte ich das Problem auch anders
lösen und werde es wohl auch tun müssen. Nur wenn etwas nicht so
funktioniert wie es soll, lässt es mir keine Ruhe, und daher meine
Anfrage. Es hätte ja sein können, dass einer von Euch da schon mal was
ähnliches erlebt hat. Oder vielleicht, dass jemand weis, wie man so
einen verriegelten 2313 wieder ansprechen kann. Trotzdem vielen Dank für
Eure Mithilfe. Ich habe doch einige gute Ratschläge bekommen.
Klaus-Peter schrieb:> Genau und nur um das geht es mir eigentlich. Auch wenn Ihr es nicht> glaubt, meine Programme laufen, alle. Nur jetzt komme ich nicht weiter,> weil jeder Versuch mit "!Sleep" zu arbeiten meine IC's himmelt.
Also ist das ein "Ja, Problem existiert noch" ?
Oder ein "Hab's noch nicht wieder probiert"
> Ob das> Programm nun der Norm von Profis entspricht weis ich nicht. BASCOM hab> ich zufällig gefunden und ich war neugierig ob ich damit was anfangen> kann. Und da die Atmels wirklich preiswert sind fing ich vor etwa 2> Jahren an, es auszuprobieren. Sicher könnte ich das Problem auch anders> lösen und werde es wohl auch tun müssen.
Niemand stört wie Du das für Dich hältst.
Es gibt da die Regel, dass Du jederzeit so programmieren kannst, wie Du
möchtest, und der µC kann dann jederzeit die Mitarbeit verweigern, so
wie er möchte :D
> Oder vielleicht, dass jemand weis, wie man so> einen verriegelten 2313 wieder ansprechen kann.
High Voltage Programmierung wäre hier das Stichwort, das kann Dein
Programmer aber nicht, da bräuchtest Du 'nen STK500.
Klaus-Peter schrieb:> Nur jetzt komme ich nicht weiter,> weil jeder Versuch mit "!Sleep" zu arbeiten meine IC's himmelt.
Wie schon erwähnt, das ist eher unwahrscheinlich. Bevor ich wirklich so
etwas annehmen würde, würd' ich eher den Fehler beim Programmer und beim
Benutzer suchen.
Wir wollten Deinen Programmcode sehen, um einschätzen zu können, ob da
etwas drinsteht, was Du für den Fehler interpretieren könntest. Nach
meiner Einschätzung hast Du Anfängerlevel, was jetzt nicht abwertend
gemeint ist. Bei Anfängern werden manche Ursachen für gänzlich andere
gehalten und ab und zu lösen sich die bei weiterer Beschäftigung mit der
Materie von selbst.
Klaus-Peter schrieb:> Außer dem Ziel-IC ist nichts angeschlossen.
Hast Du denn wenigstens den 100nF Abblockkondensator dran ? Der kann den
Unterschied ausmachen. Wie ist der genaue Aufbau beim Programmieren ?
Mein Rat wäre, je nach Budget und Verfügbarkeit einer seriellen
Schnittstelle an Deinem PC, einen STK500 zu besorgen und AVR-Studio 4 zu
installieren. Oder auch das 5er-Studio, wobei mir das zu aufgeblasen
ist.
Wenn Dein Programmer STK500 kompatibel ist, solltest Du das AVRStudio
installieren und den Programmer starten.
Da kannst Du dann in aller Ruhe Diagnostik betreiben, warum er sich
nicht programmieren lassen soll.
Also Signatur lesen, bei Bedarf SPI-Takt runter setzen, Erase machen
usw.
Peter
Klaus-Peter schrieb:> Oder vielleicht, dass jemand weis, wie man so> einen verriegelten 2313 wieder ansprechen kann.
Wie bereits genannt, geht das im HV-Modus mit einem STK500 oder Dragon.
Beides steht mir zur Verfügung, wenn es Dir das Porto und Rückporto
(nach Sachsen-Anhalt) wert ist, dann überprüfe und rette ich die Dinger
gern mal.
Bei Bedarf Kontaktaufnahme über PM:
http://www.mikrocontroller.net/user/show/hannes
...
Hast Du überhaupt eine ordentliche, d.h. stabile Stromversorgung für den
AVR?
Es kann gut sein, daß Du den Power-Down-Modus setzt, der AVR zieht
keinen Strom mehr, die VCC läuft hoch und es macht Peng.
Dann ist der AVR nicht durch das Sleep gestorben, sondern durch
Überspannung.
Tip:
Kauf Dir ne Stange Suppressordioden für 5V und baue die in jede
Schaltung ein.
Die begrenzen im Fehlerfall auf ~6,8V und bei nem starken Netzteil
opfern sie sich (Kurzschluß) und schützen damit die Schaltung.
Peter
MWS schrieb:> Was steht denn auf den ATTinys drauf, ATTiny2313 oder ATTiny2313A ?
An Alle,
danke für die vielen guten Ratschläge. Ich war bisher Einzelkämpfer und
Seiteneinsteiger, daher ist mein Fachjargon wahrscheinlich sehr
mangelhaft. Was aber nicht darüber hinwegtäuschen soll, dass ich mehrere
auch kompliziertere Programme zum Laufen gebracht habe. Auch mag
vielleicht die Kontrolle des Progammverlaufs mit Printbefehlen und dem
Terminalprogramm sehr Laienhaft sein, aber ich kann Euch versichern,
dass ich sehe ob meine Programme laufen oder nicht.
Also nochmal, das gepostete Programm läuft ohne "!Sleep" genau wie es
soll. Ich habe es nur um es zu beweisen 10 Mal gelöscht und neu geladen,
immer im gleichen IC. Also kann es weder am Programm, noch am
Programmierer, noch am Benutzer, noch am Netzteil (Schaltnetzteil 2,5A)
auf dem Testboard mit 100µF,100nF abgeblockt, sondern nur an dem
"!Sleep" Befehl liegen. Das wars. Auch wenn es so aussieht als würde ich
die guten Ratschläge von Euch ignorieren. Ich werde diesen Befehl aus
meinem Befehssatz für den Tiny 2313 (ohne A!) streichen, denn sonst sehe
ich ihn, weil kleiner als der Mega8, als für mich brauchbare Ergänzung
zu Letzterem.
Der Tiny hat 2,35€ gekostet. Ich hab damals 10 Stück gekauft und werde
mir noch mal welche besorgen. Bis jetzt lohnt es sich also nicht, sie
zur Überprüfung (danke Hannes) wegzuschicken, noch dafür einen
HV-Programmer zu kaufen (danke MWS).
Klaus-Peter
Klaus-Peter schrieb:> Also kann es weder am Programm, noch am> Programmierer, noch am Benutzer, noch am Netzteil (Schaltnetzteil 2,5A)> auf dem Testboard mit 100µF,100nF abgeblockt, sondern nur an dem> "!Sleep" Befehl liegen. Das wars. Auch wenn es so aussieht als würde ich> die guten Ratschläge von Euch ignorieren.
wenn du das sagst muss es ja stimmen,
wieder Mal ist Atmel schuld
Klaus-Peter schrieb:> MWS schrieb:>> Was steht denn auf den ATTinys drauf, ATTiny2313 oder ATTiny2313A ?>> An Alle,> danke für die vielen guten Ratschläge. Ich war bisher Einzelkämpfer und> Seiteneinsteiger,
Bin und war ich auch.
> daher ist mein Fachjargon wahrscheinlich sehr> mangelhaft. Was aber nicht darüber hinwegtäuschen soll, dass ich mehrere> auch kompliziertere Programme zum Laufen gebracht habe.
Das dachte ich von meinen ersten Programmen auch mal. Heute sehe ich das
differenzierter, da würde ich Vieles anders machen.
> Auch mag> vielleicht die Kontrolle des Progammverlaufs mit Printbefehlen und dem> Terminalprogramm sehr Laienhaft sein, aber ich kann Euch versichern,> dass ich sehe ob meine Programme laufen oder nicht.
Das schon, man kann's aber auch unnötig kompliziert machen bzw. unnötige
Fehlerquellen einbauen und das Programm läuft trotzdem und es sieht auch
so aus, als ob es das tut was es soll.
> Also nochmal, das gepostete Programm läuft ohne "!Sleep" genau wie es> soll. Ich habe es nur um es zu beweisen 10 Mal gelöscht und neu geladen,> immer im gleichen IC. Also kann es weder am Programm, noch am> Programmierer, noch am Benutzer, noch am Netzteil (Schaltnetzteil 2,5A)> auf dem Testboard mit 100µF,100nF abgeblockt, sondern nur an dem> "!Sleep" Befehl liegen.
So sieht es aus, so muss es aber nicht sein. Du benutzt einen
"Tiefschlaf-Modus", in dem der CPU-Takt abgeschaltet wird und daher
keine Timer mehr laufen. Da kommst Du nur wieder raus mit externem
Interrupt im Low-Level-Mode, dem Pinchange-Interrupt oder TWI-Interrupt
(hierzu irrelevant).
Fast alle meine Programme benutzen Sleep, und zwar konsequent am Ende
der Mainloop. Einerseits damit (z.B. bei impulserzeugenden Programmen)
die Interrupt-Response-Time konstant bleibt, aber auch weil es schön
bequem ist. Da ich meist einen Timer brauche, bleibt mir dabei nur der
Idle-Mode.
Will ich "Tiefschlaf" mit Wecken per Taster und brauche in den
Ruhepausen keinen Timer, dann arbeite ich mit wechselnden Sleep-Modi.
Solange das Ding aktiv ist (und Timer braucht), wird nach jeder Runde
der Mainloop im Idle-Mode gepennt, bis der Timer wieder weckt. Sind die
Bedingungen zum Deaktivieren erfüllt, so wird der Sleep-Mode auf
"Tiefschlaf" umgeschaltet und der externe Interrupt freigeschaltet. Beim
nächsten Erreichen des Sleep-Befehls am Ende der Mainloop wird dann der
Takt abgeschaltet. Nun kann den Controller nur noch der externe
L-Pegel-Interrupt aufwecken. Der zugehörige Interrupt schaltet nur den
Sleep-Mode auf Idle um und deaktiviert den externen Interrupt. Beim
nächsten Sleep ist dann der Idle-Mode aktiv, die Timer laufen und das
Programm kann Tasten entprellen und darauf reagieren. Hier mal ein
Beispiel dazu:
http://www.hanneslux.de/avr/divers/melody/melody04.htmlhttp://www.hanneslux.de/avr/divers/melody/melody04.asm> Das wars. Auch wenn es so aussieht als würde ich> die guten Ratschläge von Euch ignorieren. Ich werde diesen Befehl aus> meinem Befehssatz für den Tiny 2313 (ohne A!) streichen,
Das ist nicht nötig, man muss ihn nur richtig anwenden. Dazu gehört
auch, dass man sich mit der Architektur des Controllers vertraut macht,
also versucht, die interne Logik zu verstehen.
> denn sonst sehe> ich ihn, weil kleiner als der Mega8, als für mich brauchbare Ergänzung> zu Letzterem.
Ich benutze den Tiny2313 sehr gerne. Das umfangreichste
Tiny2313-Programm ist in einem Lokfahrtregler für akkubetriebene
Gartenbahn mit 2,4GHz-RC-Steuerung. Da laufen 5 Interrupts und einige
Tasks der Mainloop. Und nach jedem abgearbeiteten Schritt gehts in den
Sleep (Idle). Der Tiny2313 liest und decodiert 5 RC-Kanalimpulse,
verwaltet ein/ausloggen der Fahrzeuge und steuert Motor, 3
Schaltfunktionen, 3 Soundsteuerfunktionen und in 4 Modi umschaltbare
Frontbeleuchtung.
http://www.hanneslux.de/planet5b/index.htmlhttp://www.hanneslux.de/planet5b/planet5-lokfahrtregler_v02.html> Der Tiny hat 2,35€ gekostet. Ich hab damals 10 Stück gekauft und werde> mir noch mal welche besorgen. Bis jetzt lohnt es sich also nicht, sie> zur Überprüfung (danke Hannes) wegzuschicken,
Ich will nix dran verdienen, Porto und Rückporto sind zweimal 1,45€.
Also zusammen mit einem frankierten Rückumschlag in einen Umschlag und
ab die Post. Du wärst da nicht der Erste.
> noch dafür einen> HV-Programmer zu kaufen (danke MWS).
Den habe ich bisher nur für Andere gebraucht. ;-)))
Hoffentlich bleibt das auch so...
> Klaus-Peter
...
Hallo Klaus - Peter,
ich habe denthread erst heute entdeckt.
mir gefällt dein !Sleep befehl nicht und zwar wie du ihn setzt. und ich
halte ihn tatschlich für die ursache deines Proplems!
du setzt dort nicht nur dir SM1 SE und SM0
sondern auch das Komplette Register!
imho
enthält dieses aber auch die Pinchange bits und damit schießt du dir
den Resetpin ab! er wird ungewollt zu PA2 und bleibt es!
deshalb kannst du nicht neu brennen
siehe Seite 53 im datasheet
hier hilft nur HV Programmierung zurück
will mann nur einzelne Bits verändern sollte man Bit-set-befehle in ASM
benutzen wenn mann kein ASM verwenden will oder mit AND und OR die bits
setzen und löschen (Maskierung)
z.b
MCUCR=MCUCR or 0b0110000; Rem setzen
MCUCR=MCUCR and 0b1000111; rem löschen
so werden nur die maskierten bits verändert
mfg Winne
A. K. schrieb:> Um die Reset-Funktion des Pins abzuschalten muss man schon m.E. schon> das entsprechende Fuse-Bit bemühen. Nichts in MCUCR schaltet die ab.
dann schau dir mal seite 53 an MCUCR register
das bietet so dumme sachen auch zur laufzeit.
Winfried J. schrieb:> dann schau dir mal seite 53 an MCUCR register> das bietet so dumme sachen auch zur laufzeit.
Die Seite 53 in meiner Version vom Datasheet (08/10) fängt an mit der
Beschreibung des PUD Bits und erwähnt sonst nur die alternativen
Pinzuordnungen, aber nichts zu Laufzeit und auch nichts über Reset. Dass
der Pin eine optionale zweite Funktion hat ist klar, wird aber über die
Fuse umgeschaltet.
Könntest du mal den Text oder Ausschnitt zeigen, auf den du dich
beziehst?
Im Register MCUCR ist doch das oberste Bit PUD mit drin.
(Pull up Disable)
Wenn das gesetzt wird, dann werden die internen Ziehwiderstände
abgeschaltet, auch wenn sie vorher eingeschaltet hatte.
Ich denke, daß man dann mit dem ISP-Programmiergerät nicht mehr dran
kommt, weil der Reset-Eingang keinen H-Pegel mehr bekommt.
MfG Paul
Winfried J. schrieb im Beitrag #2452815:
> enthält dieses aber auch die Pinchange bits und damit schießt du dir> den Resetpin ab! er wird ungewollt zu PA2 und bleibt es!> deshalb kannst du nicht neu brennen
Das ist doch jetzt wirklich der komplette Blödsinn.
MCUCR kann die internen Pullups abschalten, Sleep-Modi konfigurieren und
die Modi für ext. Int0/1 einstellen. Aber keinen Reset disablen. Hoffen
wir mal, dass nicht Deine Aufzüge nach diesem System funktionieren.
Paul Baumann schrieb:> Ich denke, daß man dann mit dem ISP-Programmiergerät nicht mehr dran> kommt, weil der Reset-Eingang keinen H-Pegel mehr bekommt.
Sobald der Programmer auf Low zieht, egal ob mit oder ohne Pullup, ist
kein Programm mehr aktiv und die Default-Einstellungen des µC sind
gültig. Per Default ist PUD ausgeschaltet, selbst wenn die Pullups für
den Resetpin überhaupt gelten sollten.
Klaus-Peter schrieb:> An Alle,> danke für die vielen guten Ratschläge. Ich war bisher Einzelkämpfer und> Seiteneinsteiger,
Statt dessen Du mir die gewünschte Antwort gibst, wird's um den Brei
rumreden und das Thema "Beleidigte Leberwurst".
Ganz deutlich: es ist uns absolut egal, wie Du programmierst, wie Du das
gelernt hast, wofür's sein soll, usw.
Aber 1) fragst Du um Hilfe und stellst Dich dabei eher als
verständnisresistent dar und 2) sagst Du "Sleep im ATTiny2313 ist
kaputt"
Klaus-Peter schrieb:> Also kann es weder am Programm, noch am> Programmierer, noch am Benutzer, noch am Netzteil (Schaltnetzteil 2,5A)> auf dem Testboard mit 100µF,100nF abgeblockt, sondern nur an dem> "!Sleep" Befehl liegen. Das wars.
Und das ist entweder ein Schmarrn oder es gibt bei diesem µC tatsächlich
einen Defekt. Wenn Letzteres der Fall ist, dann interessiert es alle
hier.
Um das Leiden abzukürzen hab' ich Dein Programm hier auf einen
ATTiny2313-20PU geflasht.
Steckbrettaufbau
Bascom Version 2.0.7.3, aktuell
Programmer Diamex ISP STK500 Nachbau
Programmeroberfläche Bascom, STK500 native driver
µC-Versorgung 5V über VTG des Programmers
mC ATTiny2313-20PU, 8MHz CKDIV8 Fuse ein, Takt 1MHz
Ich kann Dein Programm egal mit oder ohne !Sleep so oft flashen wie ich
will, da gibt's überhaupt kein Problem, und das war auch anzunehmen.
Mit Sleep funktioniert Dein Programm selbst allerdings nicht, was daran
liegt:
Klaus-Peter schrieb:> MWS schrieb:>> Du hast das Datenblatt gelesen ?>> "Standby mode is only recommended for use with external crystals or>> resonators."
Damit fällt der Standby-Mode für Dich aus. Auch der Power-Down geht
nicht, denn da läuft der Timer nicht mehr.
Was funktioniert ist der Idle-Mode, da läuft Dein Programm auch und die
Leds blinken.
Hier hab' ich alle Modi getestet:
1
Mcucr = &B00100000 ' timer läuft
2
' Mcucr = &B00110000 ' timer läuft nicht
3
' Mcucr = &B01100000 ' timer läuft nicht
4
' Mcucr = &B01110000 ' timer läuft nicht
5
!Sleep
6
Mcucr = &B00000000
Entweder Dein Programmer arbeitet nicht zuverlässig, die Stromversorgung
ist nicht ok, Dein Aufbau passt nicht, oder was auch immer.
Der ATTiny2313 kann jedoch immer wieder neu geflasht werden, also nix
mit toten Käfer.
Paul Baumann schrieb:> Ich denke, daß man dann mit dem ISP-Programmiergerät nicht mehr dran> kommt, weil der Reset-Eingang keinen H-Pegel mehr bekommt.
Vorausgesetzt die PUD Fuse hat überhaupt etwas mit dem Reset-Pullup zu
tun. Was ich für unwahrscheinlich halte. Einerseits aus der Logik der
Sache her, andererseits, weil sich der Reset-Pullup von den Pin-Pullups
technisch unterscheidet, wie das Datasheet hinten anhand der
Widerstandswerte deutlich macht.
Ausserdem setzt er das Bit auf 0, schaltet die Pullups also nicht ab.
Hi
Dein Link funktioniert nicht. Aber abgesehen davon sind, wie andere
schon gesagt haben, Reset-PullUp und IO-PullUp zwei paar Schuhe. Der
Reset-PullUp lässt sich über PUD nicht abschalten.
MfG Spess
o.k. insofern habt ihr recht ich habe mich von der seitengestaltung auf
seite 53 des schon weiteroben aufgeführten und dort funktionierenden
links in die irre führen lassen.
Beim 32er vergessen Anfänger gern den jtag abzuschalten und das geht
definitv per MCUCR zur Laufzeit durch 2maliges setzen des betreffenden
bits während 4 Takten durch die unmittelbardaurunter aufgeführten
Alternativen portfunktionen schloss ich darauf das das hier mit dem
MCUCR unmittelbar zu tun hat, aber ich schrieb auch zunächst imho weil
ich nicht ganz sicher war und fort musste.
Sorry wenn ich damit für zusätzliche Verwirrung sorgte ich war halt
derartige MCUCR Aktivitäten gewohnt.
Aber folgendes mißfällt mir trotzdem
hier wird die MCU schlafen geschickt bevor der externe interrupt erlaubt
wird! Das heist der externe IRQ ist noch gar nicht erlaubt aber der
Prozessor schläft schon
Deshalb Bits in MCUCR einzeln und in der richtigen Reihenfolge auch mit
anderen Registern setzen!
Aber der Reset sollte dann eigentlich funktionieren. Ob er das auch im
Schlaf tut? Sollte er eigentlich wenn er ordentlich arbeitet, ich werde
das mal probieren.
obwohl will ich dafür einen2313 opfern?
ich sehe lieber erst mal zu das ich ihn normal geweckt bekomme ;-)
MfG
Winfried J. schrieb:> Schlaf tut? Sollte er eigentlich wenn er ordentlich arbeitet, ich werde> das mal probieren.> obwohl will ich dafür einen2313 opfern?
Hättest Du meinen Beitrag gelesen, der zwei Beiträge vor Deinem lag,
dann würde sich Dir diese Frage nicht mehr stellen.
Was ist los ? Zu tief in's Glas geschaut ? :-)
Winfried J. schrieb:> Mcucr = &B01100000> hier wird die MCU schlafen geschickt bevor der externe interrupt erlaubt> wird!
Nein, das geschieht nicht.
Das MCUCR zu setzen ist nur die Vorbereitung auf den Sleep-Befehl. Ohne
Sleep schläft da noch gar nix. Der TE hat nur das Setzen des MCUCR an
die falsche Stelle geschrieben, üblicherweise kommt's unmittelbar vor
dem Sleep-Befehl.
A.K schrob:
>Ausserdem setzt er das Bit auf 0, schaltet die Pullups also nicht ab.
Au weh, das habe ich jetzt im Quelltext gesehen...
Ich glaube, ich bin noch im Sleep-Modus...
MfG Paul
MWS schrieb:> Der TE hat nur das Setzen des MCUCR an> die falsche Stelle geschrieben, üblicherweise kommt's unmittelbar vor> dem Sleep-Befehl.
Das würde ich nicht so eng sehen. Bei festem Sleepmode stelle ich den
Sleepmode bereits in der Init (also beim Reset) ein und rufe Sleep in
der Mainloop auf.
Bei wechselndem Sleepmode stelle ich den Modus dort um, wo es im
Programm sinnvoll erscheint. Der Aufruf von Sleep erfolgt dann aber auch
am Ende der Mainloop.
Damit bin ich bisher immer ganz gut gefahren.
...
Hannes Lux schrieb:> Das würde ich nicht so eng sehen. Bei festem Sleepmode stelle ich den> Sleepmode bereits in der Init (also beim Reset) ein und rufe Sleep in> der Mainloop auf.
Ich find's günstig Ursache und Wirkung beieinander zu haben. Für
Übersichtlichkeit kann man mit Konstanten arbeiten.
Hannes Lux schrieb:> Bei wechselndem Sleepmode stelle ich den Modus dort um, wo es im> Programm sinnvoll erscheint. Der Aufruf von Sleep erfolgt dann aber auch> am Ende der Mainloop.
Ich zitier mal kurz Seite 30 aus dem ATTiny2313 Datenblatt:
Matthias Sch. schrieb:> Hannes Lux schrieb:>> Bei wechselndem Sleepmode stelle ich den Modus dort um, wo es im>> Programm sinnvoll erscheint. Der Aufruf von Sleep erfolgt dann aber auch>> am Ende der Mainloop.Matthias Sch. schrieb:> • Bit 5 – SE: Sleep Enable> The SE bit must be written to logic one to make the MCU enter the sleep mode
when the SLEEP instruction is executed.
> To avoid the MCU entering the sleep mode unless it is the programmer’s purpose,
it is recommended to write the Sleep Enable (SE) bit to one just
> before the execution of the SLEEP instruction and to clear it immediately> after waking up.
Beides schließt sich nicht aus. Es ist durchaus möglich, den Sleep-Mode
umzustellen, aber das SE-Bit erst direkt vot dem 'sleep'-Befehl zu
setzen und direkt danach wieder zu löschen. Per Bitmanipulation kann man
das in ASM wunderbar machen. In C braucht´s halt worst case ein paar
Befehle mehr.
Matthias Sch. schrieb:> Ich zitier mal kurz Seite 30 aus dem ATTiny2313 Datenblatt:• Bit 5 – SE: Sleep
Enable
> The SE bit must be written to logic one to make the MCU enter the sleep mode
when the SLEEP instruction is executed.
> To avoid the MCU entering the sleep mode unless it is the programmer’s purpose,
it is recommended to write the Sleep Enable (SE) bit to one just
> before the execution of the SLEEP instruction and to clear it immediately> after waking up.Ich hab die Erfahrung gemacht, das Atmel so was nicht ohne Grund> schreibt.
In diesem Fall doch.
Rein logisch gesehen ist es Schwachsinn, das SE nach dem Sleep zu
löschen, wenn man es eh wieder vor dem Sleep setzt.
Und es ist völlig egal, ob man es einen Zyklus oder 10 Jahre vor dem
Sleep setzt. Sein Zustand beim Sleep ist exakt derselbe.
Hier mal die Antwort von Atmel dazu:
"FYI, there is no other way except sleep instruction to make the device
enter into sleep mode.
The statement given in the data sheet is just a recommendation to avoid
some software bugs. There may be a chance that one has enabled the sleep
instruction at some part of the huge code(buried) and some sleep
instruction that pops up from ISR which is not in the normal program
flow. There is a chance for the programmer to think it as an
unintentional event.
Hence to avoid such software bugs it is recommended in such a way
described in the data sheet and it is not mandatory to enable the SE bit
immediately prior to SLEEP instruction."
Es sollte also nur Fehlern des Softwareentwicklers vorbeugen, aber das
tut es nicht.
Es müßte dann ja noch an anderer Stelle ein Sleep ohne vorherige SE
setzen stehen. Das widerspräche aber der "Empfehlung", also ist sie
sinnlos.
Peter
Ich vermute ja immer noch, er hat die Dinger spannungsmäßig gekillt.
Aber dazu sagt er ja nichts und hat es wohl nichtmal nachgemessen.
Ich hatte schonmal ne Charge 7815, die im Leerlauf auf 30V geklettert
sind.
Peter
Peter Dannegger schrieb:> Aber dazu sagt er ja nichts und hat es wohl nichtmal nachgemessen.
Richtig, ich war seit Freitag ausser Gefecht. Man hat mir mein Auto
geschrottet und ich war nach mehreren Arztbesuchen und dam ganzen
Hickhack mit ADAC, Anwalt und Werkstatt (Gutachter) voll beschäftigt und
hatte keinen Kopf mich momentan mit diesem Problem zu befassen.
Peter Dannegger schrieb:> Ich vermute ja immer noch, er hat die Dinger spannungsmäßig gekillt.
Dann müssten ja alle IC's sterben und nicht nur wenn der !Sleep-Befehl
mit drin steht.
MWS schrieb:> Was funktioniert ist der Idle-Mode, da läuft Dein Programm auch und die> Leds blinken.
Hier bestätigt mir ein Fachmann, dass dieses Programm läuft, mal
abgesehen davon, dass es besser gemacht werden könnte. Alles was ich
wissen wollte war, warum die 2313 sich nicht mehr programmieren lasen
und was ich dagegen tun kann. Denn sie sind ja nicht gekillt, das
geladene Programm läuft ja. Es war das erste Mal, dass ich mit einem
ATiny2313 arbeitete. Mit dem ATMEGA-8 und -88 hatte ich bisher null
Probleme. Da ist mir auch noch keiner ausgestiegen oder gestorben.
Wenn es mir wieder besser geht nehme ich die Versuche wieder auf und
teste es mit dem Vorschlag: Mcucr = &B00100000 ' timer läuft
Danke einstweilen
Klaus Peter
Klaus-Peter schrieb:> Dann müssten ja alle IC's sterben und nicht nur wenn der !Sleep-Befehl> mit drin steht.
Der Sleep-Mode Power-Down bewirkt, daß der AVR keinen Strom mehr zieht.
Wenn dann das Netzteil nicht leerlauffest ist, kann die Spannung
steigen.
Zieh mal den AVR aus dem Sockel und miß die Spannung nach.
Peter
Knut Ballhause schrieb:> Peter, Du wiederholst Dich ;-)
Na und?
Wenn es keine Antwort dazu gibt muss man die Jungs immer wieder in
Erinnerung rufen.
Peter Dannegger schrieb:> Der Sleep-Mode Power-Down bewirkt, daß der AVR keinen Strom mehr zieht.
Peter, der Klaus schreibt das doch die Dinger funktionieren bis sie in
den sleep Mode gehen. Also das Programm läuft in dem µC bis zu einer
bestimmten Stelle.
Warum soll er jetzt gestorben sein? Das soll jetzt kein Klugscheisser
Spiel sein, sondern einfach nur für mein Verständnis.