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; } }
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
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
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
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
Ich könnte echt Hilfe brauchen, liest sich den Tread den niemand durch dem etwas einfällt? Gruß Steffen
Nicht immer sind alle da, die darüber etwas wissen. Also..... etwas Geduld.
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
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.
Oooops, sorry, jetz schreib' ich schon selber wie ein Legastheniker, das Forum färbt irgendwie ab...
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
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.
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.