stk500 kaputt was nun?

OP (Firma: keine) #2230296
Lesenswert?

Hallo zusammen,
am vorgestrigen Abend bei Gewitter hab ich warscheinlich mein STK500 
kaputt gemacht. Als Stromversorgung fürs STK hab ich ein ungeregeltes 9V 
300mA Netzteil benutzt. Das war sicher ein Fehler. Im Leerlauf kommen 
aus dem Netzteil 17V und belastet (mit dem STK) ca. 11V heraus.

Aufgesteckt war wie immer ein atmega8 ohne sonstige Pherepherie. Ich hab 
an diesem Tag einmal mein Programm downloaden können und beim zweiten 
mal nicht mehr. Ich hab auch mal die VTARGET gemessen welche 
erschreckender Weise ca. 6.7V beträgt. Warscheinlich eine Spannungspitze 
im 230V Netz. Fernseher, Hifi Anlage und PC waren auch an, ohne das was 
kaputt ist.

Nun hab ich gelesen, das man die VTARGET irgendwie mit AVRStudio regeln 
kann. Nun benutze ich aber schon seit Ewigkeiten Linux mit dem 
Eclipse+AVR Plugin. Dort, und auch bei avrdude kann ich eine solche 
Einstellung nicht finden. Habt Ihr noch eine Idee?

Ich hab auch mal die Spannung an den Board Spannungsreglern gemessen.

Der 78M05 bringt noch 5V, aber der dicke LM317w macht hier die 6.7V. Nun 
hab ich ein bischen bedenken, das der ATTINY und der ATMEGA8535 oder 
andere Komponenten so eine hohe Spannung vertragen.
Gibt es Stellen auf dem Board die ich noch überprüfen kann? Gibt es eine 
Firma oder jemanden der mir mein schönes Board, mit dem ich soviel 
erlebt hab ;-), reparieren kann?

Grüße
Gast #2230347
Lesenswert?

mike schrieb:
> Das STK500 kann bis 12V Spannungsversorgung vertragen.
Atmel gibt hier 15V an.

marco polo schrieb:
> Der 78M05 bringt noch 5V, aber der dicke LM317w macht hier die 6.7V. Nun
> hab ich ein bischen bedenken, das der ATTINY und der ATMEGA8535 oder
> andere Komponenten so eine hohe Spannung vertragen.
Das ist in der Tat zuviel. Beim STK500 kann für VTarget max. 6V 
eingestellt werden.

Schau mal, ob sich der ADJ-Pin des LM317 bzw. das Signal PWMA ändert 
wenn Du die Spannung verstellst (Seite 4 vom Schaltplan des STK500).
#2230394
Lesenswert?

marco polo schrieb:
> Eclipse+AVR Plugin. Dort, und auch bei avrdude kann ich eine solche
> Einstellung nicht finden. Habt Ihr noch eine Idee?
http://download.savannah.gnu.org/releases/avrdude/avrdude-doc-5.10.pdf
Seite 19.
1
3 Terminal Mode Operation
2
AVRDUDE has an interactive mode called terminal mode that is enabled by
3
the ‘-t’ option.
4
This mode allows one to enter interactive commands to display and modify
5
the various device memories, perform a chip erase, display the device
6
signature bytes and part parameters, and to send raw programming commands.
7
Commands and parameters may be abbreviated to their shortest unambiguous
8
form. Terminal mode also supports a command history so that previously
9
entered commands can be recalled and edited.
10
3.1 Terminal Mode Commands
11
The following commands are implemented:
12
...
13
vtarg voltage
14
Set the target’s supply voltage to voltage Volts.
OP (Firma: keine) #2231267
Lesenswert?

Vielen Dank erstmal für die vielen Antworten, Ihr seit super fix! Super 
Forum, danke Euch!

Danke Michael, da hab ich doch mit VTARGET in dem AVRDUDE Turorial nach 
dem Falschen gesucht. Mit den 6V, das hab ich nun mit ner virtualbox und 
dem avrstudio auch sehen können. Leider gibt meine OSE Version den 
ttyUSB0 von meinen USB-FTDI Adaptern nicht ans Windows durch.

Aber die Idee mit dem AREF Jumper war Gold Wert. Hab ich gemacht und ich 
kann wieder mit avrdude lesen und flashen!

:~> avrdude -pm8 -cstk500v2 -P/dev/ttyUSB1 -b115200
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 
0.01s
avrdude: Device signature = 0x1e9307
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

Nun hab ich einfach mal ein altes funktionierendes Programm geflascht 
und die VREF am Board ist wieder hochohmig, so wie es sein sollte. Am 
VREF vom uC kann ich 5V messen.

Wenn ich aber mein ADC Programm flasche ist die VREF am board auf 2.5V 
und die VTARGET geht auf 6.7V hoch.

Hier mal ein Schnipsel des scheinbar fehlerhaften codes:
1
    /* enable internal reference voltage */
2
    ADMUX |= ((1 << REFS1) + (1 << REFS0));
3

4
    /* select ADC the input channel */
5
    ADMUX &= (~(1 << MUX3) + ~(1 << MUX2) + ~(1 << MUX1) + ~(1 << MUX0)); /* ADC0 */
6

7
   /* the input clock frequency should be between 50-200kHz
8
    * so the prescaler should be:
9
    * 8MHz: 64
10
    * 12MHz: 64
11
    * */
12
    ADCSRA |= ((1 << ADPS2) + (1 << ADPS1) + (0 << ADPS0));
13

14
    /* ADC Enable, set free running mode */
15
    ADCSRA |= ((1 << ADEN) + (1 << ADFR));

Für mich sieht das so aus, als ob sich im STK500 etwas verändert wenn 
ich diesen Code flasche. Ich bin froh das mein STK doch nicht kaputt 
ist, verstehen tue ich das aber nicht.
OP (Firma: keine) #2231310
Lesenswert?

Hey Uwe, also ich kann da keinen Fehler feststellen. Ich hab mir die 
Bits mal über den UART ausgeben lassen sowohl mit meinem Beispiel, als 
auch in der abgeänderten Variante unten.
1
  /* enable internal reference voltage */
2
  ADMUX |= ((1 << REFS1) + (1 << REFS0));
3

4
  /* select ADC the input channel */
5
  ADMUX &= (~(1 << MUX3) + ~(1 << MUX2) + ~(1 << MUX1) + ~(1 << MUX0)); /* ADC0 */
6

7
 /* the input clock frequency should be between 50-200kHz
8
  * so the prescaler should be:
9
  * 8MHz: 64
10
  * 12MHz: 64
11
  * */
12
  ADCSRA |= ((1 << ADPS2) + (1 << ADPS1) + (0 << ADPS0));
13

14
  /* ADC Enable, set free running mode */
15
  ADCSRA |= ((1 << ADEN) + (1 << ADFR));

setzt die Bits folgendermaßen:
REFS1:1, REFS0:1, MUX3:0, MUX2:0, MUX1:0, MUX0:0
ADPS2:1, ADPS1:1, ADPS0:0, ADEN:1, ADFR:1

Die Form sieht besser aus, bringt aber auch das gleiche Ergebnis:
1
    /* enable internal reference voltage */
2
    ADMUX |= ((1 << REFS1) | (1 << REFS0));
3

4
    /* select ADC the input channel */
5
    ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0)); /* ADC0 */
6

7
   /* the input clock frequency should be between 50-200kHz
8
    * so the prescaler should be:
9
    * 8MHz: 64
10
    * 12MHz: 64
11
    * */
12
    ADCSRA |= ((1 << ADPS2) | (1 << ADPS1));
13
    ADCSRA &= ~(1 << ADPS0);
14

15
    /* ADC Enable, set free running mode */
16
    ADCSRA |= ((1 << ADEN) | (1 << ADFR));

REFS1:1, REFS0:1, MUX3:0, MUX2:0, MUX1:0, MUX0:0
ADPS2:1, ADPS1:1, ADPS0:0, ADEN:1, ADFR:1

Aber freilich sollte man sich an den "Efficient C Coding" Guide von 
ATMEL halten und die Makros benutzen...
/* Set and clear bits in I/O registers can also be declared as macros */
1
#define SETBIT(ADDRESS,BIT)     (ADDRESS |= (1<<BIT))
2
#define CLEARBIT(ADDRESS,BIT)   (ADDRESS &= ~(1<<BIT))
3

4
/* Macro for testing of a single bit in an I/O location*/
5
#define CHECKBIT(ADDRESS,BIT)   (ADDRESS & (1<<BIT))
OP (Firma: keine) #2234976
Lesenswert?

Ich muss doch nochmal fragen, vielleicht hab ich einfach zu viel Text 
rausgeballert.
Wenn ich bei meinem atmega8 die interne Referenzspannung von 2.56V 
anschalte und den AREF Jumper am stk500 gesteckt habe, warum messe ich 
dann an VTG(=VTARGET) 6.7V ? Und warum geht da mein atmega8 nicht 
kaputt, da er ja nur bis 5.5V funktionieren sollte.

(Alle fuse-bits sind im default Zustand)
#2235135
Lesenswert?

marco polo schrieb:
> Wenn ich bei meinem atmega8 die interne Referenzspannung von 2.56V
> anschalte und den AREF Jumper am stk500 gesteckt habe

AREF kann Eingang oder Ausgang sein.

Wenn er Ausgang ist (interne Referenz oder VCC), dann darfst Du nicht 
nen anderen Ausgang dagegen kämpfen lassen, basta!

Den AREF-Jumper brauchte man nur für die ganz alten AT90S4433.
Also ab den AREF Jumper und ganz weit weg schmeißen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren