Letztes Update: 11.04.2008

Hier wird es in Zukunft mehr oder weniger nützliche Tips zu Problemen bei der Programmierung von Atmels AVR/ATMega/ATiny Prozessoren geben. Ich benutze weder AVR-Studio, die STKxxx Development Boards, PonyProg noch andere Freeware AVR Prommer, das JTAG Interface, Debugger oder Simulatoren. Bei Problemen damit stell deine Fragen bitte an die entsprechenden Programmierer.

Fangen wir einfach mal an:

Lock Bits (Kopierschutz)
AT90S1200 läßt sich nur schwer per SPI programmieren
Ich kann den Prozessor auf einmal nicht mehr per SPI programmieren
Oscillator Grundeinstellung bei neueren AVR/ATMega
Vorsicht bei RSTDISBL Fuse
Die ATiny15 Falle
ISP Schnittstelle liegt bei einigen ATMega nicht auf MISO,MOSI
JTAGEN Fuse
M103C Fuse bei ATMega128
Interner RC-Oscillator
Das SPI Modul funktioniert nicht im Master Modus

Lock Bits (Kopierschutz)
Wenn die Lockbits vom AVR/ATMega/ATiny gesetzt wurden gibt es keine Möglichkeit mehr das Programm auszulesen.
Bei den meisten AT90Sxxxx und älteren ATiny kann laut Datenblatt nach Programmierung beider Lockbits die Signatur nicht mehr gelesen werden ! Das kann Probleme mit Programmen geben die die ID/Signatur prüfen. Dann wenn man diese Funktion nicht abschalten kann.

AT90S1200 läßt sich nur schwer per SPI programmieren
Laut meinen Erfahrungen liegt das daran das SCK irgendwie in andere Leitungen überspricht. Bei mir hat geholfen einen 220 Ohm Widerstand in die SCK Leitung einzufügen und einen Kondensator 100-470pF von SCK gegen Masse beim Prozessor einzulöten.

Ich kann den Prozessor auf einmal nicht mehr per SPI programmieren
Das liegt meistens daran das man die Oscillator Fuses falsch gesetzt hat. Z.B. auf externen Takt. Da hilft dann nur noch auch einen externen Takt anzulegen, z.B. mit so einem silbernen Quarzosci. Oder man holt sich den Takt aus einer anderen Schaltung ! Die Taktfrequenz ist unkritisch und kann von 1-8MHz betragen. Dabei muß man die Oscillatorbeschaltung (Quarz und zwei C's) am Prozessor nicht unbedingt auslöten. 

Vieleicht ist aber auch nur dein Programmierkabel defekt ! Check das mal.

Siehe aber auch:
Lock Bits (Kopierschutz)
Vorsicht bei ATiny und RSTDISBL Fuse

Oscillator Grundeinstellung bei neueren AVR/ATMega
Bei neueren AVR/ATMega ist im Auslieferzustand der interne 1MHz RC-Oscillator aktiviert. Auch wenn ein externer Quarzosci angeschlossen ist läuft der Prozessor dann mit dem internen RC-Oscillator. Um den externen Quarzoscillator zu aktivieren muß man die CKSEL Fuses entsprechend programmieren. Siehe Datenblatt zum Chip.

Vorsicht bei RSTDISBL Fuse
Wer die RSTDISBL Fuse brennt um den Reset-Pin als IO-Pin zu benutzen hat ganz schnell ein Problem. Der ATiny/ATMega läßt sich dann nicht mehr per SPI programmieren weil der Reset Pin ganz einfach nicht mehr arbeitet. Das kann man nur wieder rückgängig machen wenn man einen Prommer hat der 12V auf Reset geben und den ATiny im Parallelmodus programmieren kann. 

Die ATiny15 Falle
Bei ATiny15 sind die Pins PB3 und PB4 gegenüber ATiny11,12,13 vertauscht !

ISP Schnittstelle liegt bei einigen ATMega nicht auf MISO,MOSI
Achtung: Bei einigen ATMega sind die Pins MISO, MOSI für die ISP-Programmierung nicht identisch mit der Pinbelegung am Anfang des Datenblattes. Auf jeden Fall unter Serial Downloading im Datenblatt nachsehen welche Pins für die ISP-Programmierung verwendet werden. Bei ATMega128 z.B. sind es PE0 für MOSI und PE1 für MISO. SCK stimmt.

Die SPI Schnittstelle des Prozessors liegt auf den im Datenblatt angegebenen Pins MOSI, MISO. Nur für die ISP Programmierung liegen sie woanders !

JTAGEN Fuse
Wer diese Fuse brennt kann die Pins TMS, TCK, TDI, TDO im Programm nicht mehr benutzen weil sie für die JTAG Schnittstelle reserviert werden. Diese Fuse ist im Auslieferzustand aktiv ! Wer die Pins braucht muß die JTAGEN Fuse auf 1 setzen.

M103C Fuse bei ATMega128
Wenn diese Fuse gebrannt wird ist der ATMega128 kompatibel zum ATMega103. Diese Fuse ist im Auslieferzustand aktiv ! Wer den ATMega128 voll nutzen möchte muß diese Fuse auf 1 setzen.

Interner RC-Oscillator
Wofür kann man den internen RC-Oscillator benutzen und wann sollte man besser einen Quarz nehmen ?

Der interne RC-Oscillator ist für alle Programme nutzbar die KEINE Ansprüche auf genaues Timing haben.
Man kann damit I2C- oder SPI EEproms beschreiben, mehrere LED's blinken lassen, LCD-Displays ansteuern und vieles mehr.

Bei folgenden Anwendungen sollte man den internen RC-Oscillator NICHT verwenden:

Baudraten größer als 2400 Baud. Der Fehler bei z.B. 9600 Baud könnte zu groß werden.
Infrarot- oder Funkübertragungsprotokolle. Bei Uhren auf keinen Fall.
Frequenz- oder Drehzahlmesser.

Das SPI Modul funktioniert nicht im Master Modus
Dafür gibt es zwei Möglichkeiten

1) Der /SS Pin wurde nicht als Ausgang oder als Eingang mit Pullup konfiguriert.
Besser gleich als Ausgang konfigurieren. Als Eingang ist der Pin nicht verwendbar.
Ein kurzer Low-Pegel auf /SS und der Master wird zum Slave. 

2) Beim initialisieren sollte man das SPE Bit nicht vor MSTR in SPCR schreiben.
MSTR immer zuerst setzen. Beide gleichzeitig setzen ist aber kein Problem.


Ich entwerfe keine Schaltungen oder Programme für andere. Dazu fehlt mir einfach die Zeit. Bei mir sind keine Bausätze, Platinen oder programmierte Chips zu den Schaltungen erhältlich. 
E-Mail

Zur Startseite