Forum: Mikrocontroller und Digitale Elektronik Fuse Einstellung spinnt, Programmieren scheitert!


von Steffen K. (fenert)


Lesenswert?

Hallo,

ich habe ein Problem und weiß einfach nicht, was ich noch versuchen 
soll.

Ich habe versucht, ein simples Programm zur Generiegung eines 
PWM-Signals mit einem STK500 auf einen ATmega8515L zu übertragen. Das 
hat nicht funktioniert, der Controller hat einfach nicht gemacht, was er 
soll und auch nicht was er laut Simmulation tun sollte. Ich habe 
versucht den µC über SPI zu programmieren, nachdem das gescheiter war 
habe ich es mit HIGH Voltage versucht. Hat auch nicht geklappt. Nachdem 
ich einen anderen Controller eingestezt habe ist mir aufgefallen, dass 
bei den Fusebits folgende Einstellungen gesetzt waren: SPIEN=1 EESAVE=1 
BOOTRST=1 CKOPT=1 und BOOTSZ auf 1024 und $0C00. Bei dem anderen µC 
waren diese Einstellungen alle verändert, obwohl ich nichts daran 
gemacht hatte. Alle oben erwähnten Bits waren 0 und beim Speicher stand 
128 und $0F80. Ich habe versucht den Controller zu beschreiben... 
funktionierte nicht!
Und nachdem ich nochmals versucht hatte die SPI Schnittstelle zu 
verwenden waren auch hier alle Fuse Einstellungen in der gleichen weise 
verändert und AVRStudio gibt mir nur Fehlermeldungen wenn ich versuche 
die Änderungen rückgängig zu machen.
Ich weiß wirklich nicht mehr weiter. Ich habe die Jumpereinstellungen 
überprüft, das Programm, die SPI und Paralell Anschlüsse.... Nichts. Das 
Handbuch habe ich nach Hinweisen durchforstet, ebenso wie die 
Hilfedateien.
Falls jemand eine Idee hat was schief laufen könnte, bitte melden.
Ach ja das STK500  habe ich auch schon getauscht. Daran dürfte es nicht 
liegen!

Danke
Steffen

Hier noch der Quelltext:
#include <avr/io.h>          // Deklaration für Standardbefehle
#include <stdint.h>          // Deklaration für Standardintegerzahlen
#include <stdio.h>          // Deklaration für Standartzeichenbefehle
#include <avr/interrupt.h>      // Deklaration für Interrupts


volatile uint8_t pb=0;

ISR (TIMER0_OVF_vect) {

  pb ^= PINA;
  DDRC = pb;
}

int main (void) {

  TCCR0 = (1<<WGM01) | (1<<WGM00) | (1<<COM01) | (1<<COM00) | (1<<CS00);
  TIMSK = (1<<TOIE0);

  PORTA = 0x00;          // PORT A als Eingang
  PORTC = 0xFF;          // PORT C als Ausgang

  sei();

  while (1) {

    OCR0 = pb;

    }
  }

von Michael U. (amiga)


Lesenswert?

Hallo,

ISP-Frequenz zu hoch?
Ein neuer AVR läuft mit 1MHz internem Takt, also ISP-Frequenz auf 125kHz 
und dann zuerst die Signatur lesen, die muß stimmen.
Sollte man generell immer als erstes machen nachdem man was an den 
Einstellungen oder den Fuses was verändert hat und auch, bevor man nach 
dem Einschalten zum ersten mal einen AVR zu programmieren versucht.

Sowohl mein Dragon als auch das STK500 haben da sehr eigene Meinungen, 
ob die Einstellungen vom letzten Mal nun gespeichert bleiben oder auch 
nicht...

Gruß aus Berlin
Michael

von Steffen K. (fenert)


Lesenswert?

Hallo Michael,

die ISP-Frequenz liegt bei 28,36 Khz, das war die standard 
Starteinstellung. und die Signatur habe ich auch jedesmal erfolgreich 
ausgelesen. Sowohl bei ISP- als auch bei HV-programmierung.

Jetz habe ich gerade noch etwas weiter experimentiert und meine Software 
neu installiert. Erstaunlicherweise zeigt mir AVR-Studio jetzt an dass 
wie oben beschrieben alle Fuse bits gelöscht sind, wenn ich mit HV 
zugreife. Wenn ich allerdings die Fusebits über SPI auslese ist wieder 
alles so wie bei der Starteinstellung. Ich bin ein ganz klein wenig 
verwirrt.

Gruß
Steffen

von Steffen K. (fenert)


Lesenswert?

Hallo,
ich habe es jetz geschafft, das alte Programm vom Controller zu löschen, 
und das oben beschriebene aufzuspielen. es passiert jedoch nichts. Ich 
habe auch ein älteres Programm aufgespielt, das funktioniert auch nicht 
richtig! Und das problem, dass die Fusebits scheinbar nicht richtig 
ausgelesen werden, bleibt bestehen!

Ich brauch Ideen, auch wenn ihr die für Blödsinn haltet.

Gruß
Steffen

von Steffen K. (fenert)


Lesenswert?

Hat denn sonst keiner eine Idee, woran es liegen könnte, an der 
programmierung liegt´s doch nicht? - oder?
Wenn Ihr irgendeine Idee habt, nur raus damit, wahrscheinlich ist es ein 
ganz dämlicher Fehler über den ein erfahrenerer 
Elektroniker/Programmierer gar nicht nachdenken würde!

Gruß
Steffen

von Steffen K. (fenert)


Lesenswert?

Ich könnte echt Hilfe brauchen, liest sich den Tread den niemand durch 
dem etwas einfällt?

Gruß
Steffen

von Bascomfehler (Gast)


Lesenswert?

Nicht immer sind alle da, die darüber etwas wissen.
Also..... etwas Geduld.

von Michael U. (amiga)


Lesenswert?

Hallo,

das Programm ist erstmal völlig egal.
Wenn alle Jumper und Verbindungen auf dem STK500 richtig gesteckt sind, 
der AVR in der richtigen Fassung sitzt (und nur dieser eine auf dem 
STK500 steckt, hatten wir auch schon...), dann muß das STK500 die 
Signatur und die Fusebits IMMER richtig auslesen!
Wenn nicht und ein anderer (neuer?) AVR auch nicht will, ist was mit dem 
STK500, der Programmiersoftware, der Stromversurgung des STK500 faul.
Wenn ein anderes STK500 das gleiche nVerhalten zeigt, bleibt ja nur 
Stromversorgung oder Software (bzw. Firmware des STK500).

Ich hatte bisher nur einen einzigen ausgelöteten Mega8, dessen Software 
spielte, der vermutlich die Lockbits gesetzt hatte und evtl. Reset aus 
war (stammte aus einem Gerät), der sich allem widersetzte.

ISP ging nicht wegen Reset, mit HV-Prog wurde nur manchmal eine gültige 
Signatur gelesen, sah erst nach einem Wackelkontakt aus.

Ich habe das dann nicht weiter verfolgt, war nicht wichtig genug.
Der AVR ist eben im Elektronikschrott gelandet...

Gruß aus Berlin
Michael

von MWS (Gast)


Lesenswert?

Und wenn Du dann der STK geht, dann mach' Dir mal Gedanken wie man DDRx, 
PINx und PORTx verwendet. Da ist nämlich viel Unsinn in Deinem Programm.

von MWS (Gast)


Lesenswert?

Oooops, sorry, jetz schreib' ich schon selber wie ein Legastheniker, das 
Forum färbt irgendwie ab...

von Steffen K. (fenert)


Lesenswert?

Danke ersmal für die Antworten.

Ich habe die Jumper, wie in der Anleitung gestetzt ( VTARGET, AREF, 
RESET, XTAL1 & OSCSEL gesetzt(rechtsseitig, on-Board clock connected)). 
SPI kann die Signatur auslesen HV nicht. Bei dem neuen Board können 
beide Schnittstellen die Signatur auslesen. Die Fuses werden bei beiden 
Boards von der SPI erkannt, mit HV bei dem neuen Board aber nicht. Ich 
habe drei Controller versucht und alle haben das gleiche Problem. Einen 
habe ich noch über, der hoffentlich noch OK ist, ich würde mit dem aber 
lieber erst experimentieren wenn ich eine Ahnung habe woran es liegt.
Ich gehe jetzt davon aus dass zumindest bei dem alten STK etwas defekt 
ist.
Das Netztteil habe ich mit einem Spannungsmesser überprüft, bei 12V 
Solleinstellung am, Netzteil liefert es 11,99V Gleichspannnung. Ich 
werde Sicherheitshalber noch ein anderes versuchen ... aber ich erwarte 
eigentlich keine Änderung.
Als Software verwende ich AVRStudio V4.14 und den Compiler wie hier im 
Tutorium beschrieben. Ich habe ja auch schon einmal erfolgreich ein 
Programm aufgespielt und Softwareseitig nichts geändert. Ob etwas an der 
Firmware des Boards nicht stimmt, ist für mich nicht nachvollziehbar, da 
ich das Board nicht als einziger verwende. Ich glabe aber nicht, das 
einer meiner Komilitonen/Kollegen eine Änderung hierbei vorgenommen hat.

@MWS: Kannst du mir bitte mal schreiben, was dir daran unsinnig 
vorkommt, am besten als PM. Dann bleibt dieser Thread übersichtlicher. 
Und nichts gegen Legasteniker das sind die wahren Revolutionäre!

Gruß
Steffen

von André W. (sefiroth)


Lesenswert?

Versuchst Du weiterhin mit 28,36 kHz auf den AVR zuzugreifen? Es mag 
seltsam klingen, aber ich hatte schonmal Probleme mit dem Programmieren, 
als ich die ISP Frequenz zu niedrig hatte... Ich würde Dir als Standard 
125 kHz empfehlen. Vielleicht hilft das ja schon.

Wenn Du Dir nicht sicher bist, ob das Programm arbeitet, versuche es 
erstmal auf eine smple Grundfunktion zu reduzieren, die laufen muss. 
Also z.B. einen Pin auf High setzen, Programm überspielen und mit 
Multimeter messen ob 5V anliegen. So kannst Du dich langsam dem Ziel 
annähern.

Ach ja:
PORTA = 0x00;          // PORT A als Eingang
PORTC = 0xFF;          // PORT C als Ausgang

muss
DDRA = 0x00;          // PORT A als Eingang
DDRC = 0xFF;          // PORT C als Ausgang

sein, um die Register zu konfigurieren.

von MWS (Gast)


Lesenswert?

Hi Steffen,

ich bevorzuge solche Fragen innerhalb des Forums zu beantworten, solange 
ich andere Leser damit nicht nerve.

Also: so wie der André bereits schreibt, Ein- & Ausgänge werden im DDRx 
, >Data Direction Register< festgelegt, deshalb macht auch:
  pb ^= PINA;
  DDRC = pb;
keinen Sinn, denn Du veränderst in Abhängigkeit von PINA, ob PORTC ein 
Ein-oder Ausgang ist. Im Zusammenhang mit der höchstwahrscheinlich 
gewünschten Programmfunktion macht das keinen Sinn.

Also muss das heißen: PORTC = pb

Ob das Programm selbst dann Sinn ergibt, kannst nur Du sagen. So wie ich 
das lese, generierst Du eine PWM mit Wiederholfrequenz von 3900Hz (bei 
1MHz Takt) an Anschluss OC0, und möchtest mit PINA das Tastverhältnis 
des PWM Signals steuern. Wenn das Dein Ziel ist, sollte es mit den 
Änderungen wie beschrieben auch funktionieren.

von Steffen K. (fenert)


Lesenswert?

@Andrè und MWS: Danke für den Hinweis. Stimmt natürlich! Dummer 
Flüchtigkeitsfehler meinerseits.

@MWS: Hast du richtig erkannt, genau das soll das programm machen!

Gruß
Steffen

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.