Forum: Mikrocontroller und Digitale Elektronik AVR - Programmer von laufendem Programm gestört?


von Eduard E. (eddie)


Lesenswert?

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:
1
avrdude: Device signature = 0xffffff avrdude: Yikes! Invalid device 
2
signature. with varying device signatures.

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
int main(void){
15
16
  LED_PORT = 0x00;
17
  LED_DDR = 0xFF;
18
19
  uint8_t tmp = 0x00;
20
  while(1){     
21
  /* i dont know why, but this will fry my attiny... */
22
     CLR_PIN(LED_PORT, tmp);
23
     SET_PIN(LED_PORT, tmp);
24
     tmp++;
25
     if (tmp == 8)
26
        tmp = 0;
27
  }
28
  return 0; 
29
}

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

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

von Eduard E. (eddie)


Lesenswert?

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

von Walter (Gast)


Lesenswert?

programmierst du den Controller incircuit?

von Eduard E. (eddie)


Lesenswert?

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.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

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.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

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

von Eduard E. (eddie)


Lesenswert?

Ah, verstehe.
Die 8LEDs hängen an PORTB.
Abstecken habe ich auch schon probiert, ohne erfolg.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Mach mal ein Foto von deinem Steckbrettaufbau (mit und ohne 
angeschlossenem Programmer).

von Peter D. (peda)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Eduard E. (eddie)


Angehängte Dateien:

Lesenswert?

Hier der Aufbau.

von Magnus M. (magnetus) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Eduard E. (eddie)


Lesenswert?

Der Quarz steckt richtig.

Die Kondensatoren am Quarz sind über das andere Ende der Leiste mit GND 
verbunden, das ist am Foto leider rausgeschnitten.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Eduard E. (eddie)


Lesenswert?

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.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

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

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

: Bearbeitet durch User
von Thomas (kosmos)


Lesenswert?

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.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

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

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Gerhard W. (gerhard_w)


Lesenswert?

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?

von Walter (Gast)


Lesenswert?

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 
...

von Thomas E. (thomase)


Lesenswert?

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.

: Bearbeitet durch User
von Thomas (kosmos)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

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

von Gerhard W. (gerhard_w)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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.

von Stefanus (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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.

von Magnus M. (magnetus) Benutzerseite


Angehängte Dateien:

Lesenswert?

@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.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

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.

von Eduard E. (eddie)


Lesenswert?

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.

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.