Hi!
Ich spiele mich gerade mit einem ATTiny2313 mit mySmartUSB light
Programmer herum. Alles klappt wunderbar, aber wenn ich den unten
angefügten Code auf den Microcontroller spiele scheint dieser sich nicht
mehr programmieren lassen zu wollen, ich bekomme:
Das Programm wird scheinbar korrekt ausgeführt, alle angeschlossenen
LEDs leuchten.
Ich habe daraufhin einen neuen ATTiny genommen, die Fusebits für mein
setting gesetzt und ein anderes Programm ausprobiert, alles hat normal
funktioniert, aber sobald ich das gepostete Programm draufgespielt habe
war der effekt wieder der selbe. Ich kann weder die Fusebits auslesen,
noch den Speicher löschen oder ein neues Programm aufspielen.
Meine Fuebits:
lfuse: 0b10101111
hfuse: 0b11011111
efuse: 0b11111111
1
// 16MHz
2
#define F_CPU 1600000UL
3
4
#include<avr/io.h>
5
#include<avr/interrupt.h>
6
#include<avr/pgmspace.h>
7
#include<util/delay.h>
8
9
#define LED_DDR DDRB
10
#define LED_PORT PORTB
11
#define SET_PIN(PORT, PIN) PORT |= (1 << PIN)
12
#define CLR_PIN(PORT, PIN) PORT &= ~(1 << PIN)
13
14
intmain(void){
15
16
LED_PORT=0x00;
17
LED_DDR=0xFF;
18
19
uint8_ttmp=0x00;
20
while(1){
21
/* i dont know why, but this will fry my attiny... */
Hallo eddie,
welche Fuses sind das denn? Wenn Du den Oszillator veränderst oder
Programmiermoden abschaltest kann diese Situation auftreten. Kannst Du
den Chip löschen?
Grüße, Kurt
Hi!
Löschen kann ich auch nicht.
Geändert wird lfuse auf einen externen quarz > 8MHz mit schneller start
up time.
Wenn ich die Fuses gesetzt habe rennt der uC auch brav mit 16MHz, ich
habe zum testen den Timer ein paar LEDs im Sekundentakt hochzählen
lassen. Erst wenn ich das neue Programm draufspiele geht nichts mehr.
lg
Was meinst du mit incircuit?
Der Controller ist auf einem Steckbrett, angeschlossen sind 3
Kondensatoren für Quarz/Spannungsversorgung, der Quarz selber und 8LEDs
mit Vorwiderständen.
Eduard E. schrieb:> Was meinst du mit incircuit?
Den Controller in der Zielschaltung (mit Allem drum herum) via ISP
programmieren.
> Der Controller ist auf einem Steckbrett, angeschlossen sind 3> Kondensatoren für Quarz/Spannungsversorgung, der Quarz selber und 8LEDs> mit Vorwiderständen.
Also alle 8 LEDs an PORTB?
Zieh mal alle LEDs (wenigstens die LEDs, die an PB5, PB6 und PB7 hängen)
ab.
Wenn Du den Prozessor in ein Programmiergerät steckst, also aus der
Schaltung entfernst, hat er keinen Takt mehr und kann über ISP nicht
mehr programmiert werden. Da hilft dann nur noch HV-Programmierung um
die Flags zurückzusetzen.
Oder eben die Programmierung mit angeschlossenem Quarz, also in der
Schaltung (incurcuit).
Grüße, Kurt
Eduard E. schrieb:> Geändert wird lfuse auf einen externen quarz > 8MHz mit schneller start> up time.
Keine gute Idee, Quarze mögens gemütlich, d.h. längst mögliche Zeit.
Ansonsten würde ich sagen, Firmwarebug in Deinem Programmer.
Wenn der Programmer Reset zieht, gehört der Controller ihm. Egal, was
für ein Programm darauf läuft. Ist allerdings ein Fehler in der
Hardware, kann das die seltsamsten Effekte haben. Steckbrettaufbau ist
dafür natürlich prädestiniert.
mfg.
Eduard E. schrieb:> Hier der Aufbau.
1. Steckt dein Quarz richtig? Es sieht so aus als würde er auf den
Pins 3 & 5 stecken (gehört aber an 4 & 5).
2. Die beiden Keramikkondensatoren am Quarz enden evtl. im Nirvana.
Versuche die masseseitigen Anschlüsse (rote Markierung) direkt auf
Pin 10 (orangene Markierung / GND) zu legen.
Also bleibt die Frage: nimmst Du den Prozessor zum Programmieren aus dem
Steckbrett, oder programmierst Du auf dem Steckbrett mit angelegter
Betriebsspannung?
Wenn Du den Prozessor raus nimmst, hat er am Programmiergerät keinen
Oszillator mehr, und kann nur mit der HV-Programmierung programmiert
werden.
Grüße, Kurt
Eduard E. schrieb:> Die Kondensatoren am Quarz sind über das andere Ende der Leiste mit GND> verbunden
Das ist aber eine sehr ungünstige Beschaltung für den Quarz. Sieh mal
zu, dass die Massepfade zum uC GND-Pin kürzer werden:
http://www.lothar-miller.de/s9y/categories/33-Quarz
Ich programmiere ihn so wie abgebildet, die nach unten weggehenden 6
Kabel gehen zum Programmer.
Wenn ich so wie abgebildet den uC durch einen anderen ersetze ohne den
Rest anzurühren klappt alles normal, ich kann programmieren auslesen und
löschen - so lange bis ich besagtes Programm aufspiele.
Also verwendest Du ISP. Das kann man in den Fuses abschalten. Kann es
sein, dass beim brennen des Programms die Fuses so gesetzt sind, dass
ISP abgeschaltet wird? Abschalten geht mit ISP, anschalten dann nicht
mehr :-).
Grüße, Kurt
Ich vermisse auf deinem Board die ganzen 100nF Kerkos und die
Resetbeschaltung 10kOhm von VCC nach Reset nicht das du deinen
Programmer überlastet wenn der den Resetpin nicht runterziehen kann.
Anbei mal ein Bild meiner allerersten ersten Versuche, da sieht du die
kerkos und die Resetbeschaltung.
Kurt Harders schrieb:> Also verwendest Du ISP. Das kann man in den Fuses abschalten. Kann es> sein, dass beim brennen des Programms die Fuses so gesetzt sind, dass> ISP abgeschaltet wird? Abschalten geht mit ISP, anschalten dann nicht> mehr :-).
Beim Programmieren werden die Fuses nicht verändert. Es sei denn, man
programmiert mit einem elf-File, in dem die Fuses enthalten sind. Ich
denke aber, daß das nicht der Fall ist.
Thomas O. schrieb:> Ich vermisse auf deinem Board die ganzen 100nF Kerkos und die> Resetbeschaltung 10kOhm von VCC nach Reset nicht das du deinen> Programmer überlastet wenn der den Resetpin nicht runterziehen kann.>> Anbei mal ein Bild meiner allerersten ersten Versuche, da sieht du die> kerkos und die Resetbeschaltung.
Ein Kondensator an Reset ist reine Paranoia. Allerdings ist der
Stützkondensator zwischen Vcc und GND zwar direkt am Vcc-Pin platziert
aber durch die gefühlt einen halben Meter lange Massestrippe praktisch
nicht vorhanden. Die 3 Klemmstellen mit entsprechenden
Übergangswiderständen tun ihr übriges dazu.
mfg.
Die länge der Massestrippe spielt überhaupt keine Rolle, denn der µC
holt sich die Impulsleistung aus dem Kerko und nicht aus der Meterlangen
Leitungen zum Kerko. Mit dem Übergangswiderständen gebe ich dir recht,
aber das ist halt Steckbrett bedingt.
Im normalfall benötigt man den Resetkerko nicht aber sobald die
Schaltung in eine verseuchte Umgebung würde ich nicht darauf verzichten.
Thomas Eckmann schrieb:> Beim Programmieren werden die Fuses nicht verändert. Es sei denn, man> programmiert mit einem elf-File, in dem die Fuses enthalten sind. Ich> denke aber, daß das nicht der Fall ist.
Da mindestens die Fuses für den Quarzoszillator gesetzt werden, muss
irgendjemand an den Fuses drehen. Je nach Programmer hat man sich da
ganz schnell vertan, und ISP abgeschaltet.
Grüße, Kurt
Thomas Eckmann schrieb:> Kurt Harders schrieb:>> Also verwendest Du ISP. Das kann man in den Fuses abschalten. Kann es>> sein, dass beim brennen des Programms die Fuses so gesetzt sind, dass>> ISP abgeschaltet wird? Abschalten geht mit ISP, anschalten dann nicht>> mehr :-).>> Beim Programmieren werden die Fuses nicht verändert. Es sei denn, man> programmiert mit einem elf-File, in dem die Fuses enthalten sind.
Aber selbst dann kann man nicht per SPI-Programmierung die SPIEN Fuse
umdrehen.
Kurt Harders schrieb:> Da mindestens die Fuses für den Quarzoszillator gesetzt werden, muss> irgendjemand an den Fuses drehen. Je nach Programmer hat man sich da> ganz schnell vertan, und ISP abgeschaltet.
Er könnte sich maximal Reset unter dem Hintern weggefused haben. Aber
die SPIEN Fuse ist per serial programming nicht änderbar.
fängt der Programmer überhaupt an es zu versuchen? oder kommt gleich die
Fehlermeldung?
Blinken die LEDs dabei munter weiter?
Wie schnell ist die ISP-Frequenz eingestellt?
nimm Mal einen neuen Tiny, lass die Fuses unverändert und dann probierst
du das ganze noch Mal,
wenn das geht setzt du die Fuse für quarz mit langer startzeit und dann
berichte Mal.
Zum Entwickeln gehört ein systematisches Vorgehen bei der Fehlersuche
...
Thomas O. schrieb:> Die länge der Massestrippe spielt überhaupt keine Rolle, denn der µC> holt sich die Impulsleistung aus dem Kerko und nicht aus der Meterlangen> Leitungen zum Kerko. Mit dem Übergangswiderständen gebe ich dir recht,> aber das ist halt Steckbrett bedingt.>> Im normalfall benötigt man den Resetkerko nicht aber sobald die> Schaltung in eine verseuchte Umgebung würde ich nicht darauf verzichten.
Der Kondensator gehört direkt an die Vcc- und GND-Pins des Controllers.
Und nicht mit einem Pin irgendwo an GND, so wie es hier der Fall ist.
Wenn du das Problem nicht verstehst, dann nimm es einfach so hin. Aber
verbreite hier keinen Unsinn.
http://www.atmel.com/images/atmel-2521-avr-hardware-design-considerations_application-note_avr042.pdf
mfg.
hast du dir mein Bild überhaupt angesehen, dort sitzen die Kondensatoren
direkt an den VCC und GND Pins des µC. Und beim Eduard sind entweder
garkeine vorhanden oder sitzen sogar vor seinen Strippen wo sie absolut
wirkungslos sind und genau das wollte ich ihm mitteilen die Atmel Design
Richtlinien kommen da genau recht, da kann er sich diese Stromschleifen
genau ansehen um es zu verstehen.
Thomas O. schrieb:> hast du dir mein Bild überhaupt angesehen, dort sitzen die Kondensatoren> direkt an den VCC und GND Pins des µC. Und beim Eduard sind entweder> garkeine vorhanden oder sitzen sogar vor seinen Strippen wo sie absolut> wirkungslos sind und genau das wollte ich ihm mitteilen die Atmel Design> Richtlinien kommen da genau recht, da kann er sich diese Stromschleifen> genau ansehen um es zu verstehen.
Natürlich. Der ist ja auch völlig in Ordnung. Aber um deinen Aufbau geht
es hier doch gar nicht. Sondern um die viel zu lange Massestrippe beim
Aufbau des TO. Und das ist nicht egal.
mfg.
Hi
>hast du dir mein Bild überhaupt angesehen, dort sitzen die Kondensatoren>direkt an den VCC und GND Pins des µC.
Nö. VCC und GND vom µC sind beide an VCC vom Bredboard angeschlossen.
Der ATTiny2313 des TOs hat auch nur einmal VCC/GND.
MfG Spess
es birngt nichts, wenn Du hier Fragen und Hinweise ignorierst!
Magnus M. schrieb:> Steckt dein Quarz richtig? Es sieht so aus als würde er auf den> Pins 3 & 5 stecken (gehört aber an 4 & 5).Gerhard W. schrieb:> fängt der Programmer überhaupt an es zu versuchen? oder kommt gleich die> Fehlermeldung?> Blinken die LEDs dabei munter weiter?> Wie schnell ist die ISP-Frequenz eingestellt?
Thomas Eckmann schrieb:> Ein Kondensator an Reset ist reine Paranoia.
Meine Erfahrung ist genau gegensätzlich.
Ohne Kondensator kann sich leicht eine Störung einkoppeln und dann
startet das Programm jedesmal neu und der Nutzer wundert sich.
Das Reset erfolgt nämlich asynchron, d.h. kann deutlich kürzer sein, als
ein CPU-Zyklus.
Ein 100nF hilft dagegen enorm. Und ist auch deutlich billiger, als ein
komplettes Schirmgehäuse für die gleiche Wirkung.
Die Programmer stört er auch nicht, die rechnen damit.
Nur beim Debugwire würde er stören.
Braucht man ISP nicht, kann man Reset auch direkt an VCC legen.
Eine Schaltung mit offenem Resetpin ist extrem handempfindlich.
Ich hatte den gleichen Effekt mehrmals mit einem Atmega644, wo der Reset
Pin nur mit dem ISP Programmer verbunden war. Bei bestimmtem (aber
längst nicht allen) Programmen versagte die ISP Schnittstelle. Wenn ich
aber den Programmstart verhinderte, indem ich den Reset-Pin fest mit GDN
verband, funktionierte die ISP Schnittstelle.
Kondensator und Pull-Up Widerstand hatten keinen Einfluss auf den
Effekt.
Seit dem habe ich mir angewöhnt, wenigstens einen eine Taster oder
Jumper für Reset auf die Platine zu löten.
Allerdings ist mit dieser Effekt bei anderen Platinen nicht vorgekommen.
Das mag am Programm liegen oder an der hardare - ich hab's nicht weiter
untersucht.
Peter Dannegger schrieb:> Thomas Eckmann schrieb:>> Ein Kondensator an Reset ist reine Paranoia.>> Meine Erfahrung ist genau gegensätzlich.
Ist das nicht eher historisch, weil das schon immer so war? Ich habe mit
den neueren AVR noch nie Probleme damit gehabt.
> Die Programmer stört er auch nicht, die rechnen damit.> Nur beim Debugwire würde er stören.
Das ist natürlich der Hauptgrund, weswegen ich den Kondensator weglasse.
mfg.
Thomas Eckmann schrieb:> Ist das nicht eher historisch, weil das schon immer so war?
Nö.
Bei Lochrasteraufbauten ist mir das häufiger passiert.
Man tastet irgendwo an und der AVR rennt von vorne los.
Mit 100nF ist der Effekt weg.
Und historisch war das auch weniger kritisch, da nicht asynchron.
Z.B. der 8051 brauchte eine 24 Quarztakte lange Störung, ehe das einen
Reset auslöste.
Peter Dannegger schrieb:> Thomas Eckmann schrieb:>> Ist das nicht eher historisch, weil das schon immer so war?>> Nö.> Bei Lochrasteraufbauten ist mir das häufiger passiert.> Man tastet irgendwo an und der AVR rennt von vorne los.> Mit 100nF ist der Effekt weg.
Hmm. Ich will das nicht in Abrede stellen, aber bestätigen kann ich das
auch nicht. Aber solange ich die auf dem Tisch hab, stehen die in aller
Regel auch auf dW.
>> Und historisch war das auch weniger kritisch, da nicht asynchron.> Z.B. der 8051 brauchte eine 24 Quarztakte lange Störung, ehe das einen> Reset auslöste.
Die brauchten ja ohnehin eine Resetbeschaltung.
mfg.
Thomas Eckmann schrieb:> Aber solange ich die auf dem Tisch hab, stehen die in aller> Regel auch auf dW.
Dann ist der Tiefpaß ja schon on chip aktiviert.
Peter Dannegger schrieb:> Thomas Eckmann schrieb:>> Aber solange ich die auf dem Tisch hab, stehen die in aller>> Regel auch auf dW.>> Dann ist der Tiefpaß ja schon on chip aktiviert.
Der Tiefpass ist doch grundsätzlich vorhanden:
AVR042:
"To protect the RESET line further from noise, it is an advantage to
connect a capacitor from the RESET pin to ground. This is not directly
required since the AVR internally have a low-pass filter to eliminate
spikes and noise that could cause reset. Applying an extra capacitor is
thus an additional protection."
Die Option ist doch eher die, daß der TP bei dW abgeschaltet wird.
mfg.
@Eduard:
Ich bin davon überzeugt, dass Dein Problem im Takt liegt.
Nimm einen "frischen" Tiny2313 (oder wenigstens einen, den Du noch mit
deinem Programmer erreichen kannst) und programmiere ihn mit dem
angehängten HEX File. Bitte lass die Fuses dieses Tinys unangetastet!
Das Programm macht deinen Tiny zu einem kleinen Taktgenerator. An allen
verfügbaren Pins der Ports B und D wird nach dem Anlegen der
Versorgungsspannung ein Takt ausgegeben.
Um nun Verwechslungen vorzubeugen solltest du diesen "Takt-Tiny"
irgendwie markieren (Aufkleber, Farbklecks o.Ä.).
Nun steckst du beide Tinys auf dein Steckbrett und verdrahte beide so,
dass jeder an der Versorgungsspannung hängt. Abblockkondensatoren bitte
nicht vergessen. LASS DEN QUARZ UND DIE DAZUGEHÖRIGEN Cs WEG! Verbinde
nun z.B. Pin 2 (PD0) des markierten Tinys mit Pin 5 (PA0/XTAL1) des
anderen Tinys. Nun verbindest du noch deinen Programmer mit dem nicht
markierten Tiny.
Jetzt solltest du den nicht markierten Tiny mit dem Programmer erreichen
können um z.B. die Fuses zu überprüfen / korrigieren.
Nachtrag:
Magnus M. schrieb:> Jetzt solltest du den nicht markierten Tiny mit dem Programmer erreichen> können um z.B. die Fuses zu überprüfen / korrigieren.
Vorsichtshalber solltest Du die ISP Frequenz Deines Programmers auf den
niedrigsten Wert einstellen.
Erstmal vielen Dank für die ganzen Hinweise!
Stefanus schrieb:> Ich hatte den gleichen Effekt mehrmals mit einem Atmega644, wo der Reset> Pin nur mit dem ISP Programmer verbunden war. Bei bestimmtem (aber> längst nicht allen) Programmen versagte die ISP Schnittstelle. Wenn ich> aber den Programmstart verhinderte, indem ich den Reset-Pin fest mit GDN> verband, funktionierte die ISP Schnittstelle.
Wenn ich Reset direkt mit GND verbinde funktioniert der Programmer
wieder normal und kann den uC auslesen und löschen. Sobald das Programm
gelöscht ist funktioniert wieder alles.
Um die restlichen Fragen noch zu beantworten - ev. kann ja jemand die
Ursache erklären:
Gerhard W. schrieb:> fängt der Programmer überhaupt an es zu versuchen? oder kommt gleich die> Fehlermeldung?
Er fängt an es zu versuchen.
Was mir auffällt: Normalerweise sind beim programmieren nur die mit dem
Programmer verbundenen Pins aktiv, bei den "blockierten" ATTinys sind
alle aktiv, auch die die nicht zum Programmer führen.
>Wie schnell ist die ISP-Frequenz eingestellt?
SCK period: 3.3us
Auch wenn ich sie auf 1.1us stelle bleibt der Fehler.
Magnus M. schrieb:> Ich bin davon überzeugt, dass Dein Problem im Takt liegt.
Ich bin ziemlich sicher dass es nicht am Takt liegen kann da die nicht
erreichbaren Controller normal starten und das Programm auch ausführen.
Wenn ich testweise den Quarz abstecke und resette bleiben die LEDs
dunkel, sobald ich ihn wieder anstecke startet das Programm.