Hallo Hubert,
danke für die Erklärung der HV-Programmierung. Das Problem für mich war ja, dass der Controller auf nichts mehr reagiert hat, bzw. das ganze STK lahm gelegt hat sobald er gesteckt war. Ansonsten war nichts weiteres verkabelt. Es war lediglich das 6-polige ISP-Kabel auf dem STK gesteckt. Also war der Controller für mich eh für die Tonne. Da macht dann Beinchen biegen auch nichts mehr, hauptsache man kommt auf die Ursache und kann sie vielleicht das nächste mal vermeiden.
@HeXPloreR: Das STK500 ist gekauft und funktioniert seit Jahren einwandfrei. Und tut es ohne den komischen Mega8 auch. Ich habe heute damit mehrere verschiedene Schaltungen einwandfrei geflasht.
Klar hätte ich mir einen "Zwischensockel" bauen können, aber siehe meine Erklärung an Hubert.
Die Ursache ist für mich aber immer noch unlogisch. Ein "leeres" STK500, das einwandfrei funktioniert. Alle Jumper in der Standard-Stellung bis auf den OSCEL für den Quarz. Nur ein Mega8 im grünen Sockel und das 6-polige ISP-Kabel entsprechend gesteckt. Und dann ca. 20 Zeilen Code zum initialisieren der Ports und Funktionen und dann habe ich plötzlich >6V Versorgungsspannung solange der Atmel steckt. Ich habe den Controller nur "aufgesetzt" und sobald ich ihn anhebe ist die Spannung des STK wieder auf 5V runter gegangen und ich konnte via AVR-Studio damit kommunizieren. Controller wieder aufgesetzt und die Spannung war >6V und das AVR-Studio meldet, dass kein STK angeschlossen ist. Durch hochbiegen von ARef und AVCC am Mega8 ist nun alles wieder in Ordnung und ich kann ohne Probleme flashen.
Ich versteh's nicht! Und zur Verwirrung hier noch mal der komplette Code:
Code:
#define AVRGCC
#include <avr/io.h>
#include <util/delay.h>
#include <compiler.h>
//F_CPU = 4000000
#define BAUD 9600l
#define UBRRValue (F_CPU / (BAUD * 16) - 1)
void sendMsg (char *Msg, bool addCR)
{
while (*Msg != 0)
{
while ( !(UCSRA & (1<<UDRE)));
UDR = *Msg++;
}
if (addCR)
sendMsg ("\r\n", FALSE);
}
int main (void)
{
DDRB = 0b11111111;
PORTB = 0b00000000;
DDRD = 0b00000000;
PORTD = 0b00000000;
DDRC = 0b00000000;
PORTC = 0b00000000;
UCSRB = (1<<RXCIE) | (1<<TXEN);
UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
UBRRH = (U8)(UBRRValue>>8);
UBRRL = (U8)UBRRValue;
ADMUX = (1<<REFS1) |(1<<REFS0);
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
sendMsg ("Start", TRUE);
while (1)
{
}
return (0);
}
Viele Grüße
Andreas
Lesezeichen