PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zweiter Mikrocontroller als Taktgeber - Fusebits falsch gestellt -.-



Lif
10.12.2012, 14:30
Hallo!
Zuersteinmal: ich weiß, dieses Thema wurde schon oft besprochen, aber ich habe wohl gerade ein Brett vor dem Kopf um komme nicht weiter. ;-)

Vor einigen Wochen bin ich über dieses Forum zur Mikrocontroller-Programmierung gekommenJ.
Nach meinen ersten Versuchen mit dem Attiny13A, habe ich nun versucht, den Atmega324a über Uart mit meinem PC (USB) kommunizieren zu lassen.
Dafür sollte der Mikrocontroller mit einem externen 12Mhz Quarz laufen… und was passiert natürlich. Im Eifer des Gefechts habe ich über avrdude die falschen Fusebits gesetzt und den Atmega324a wohl auf external Clock gestellt – wie sollte es auch anders sein -.- . Also kann aich nicht mehr auf den Atmega324a zugreifen.
Nun habe ich im Tutorial gelesen, man könne den Takt durch einen weiteren Mikrocontroller simulieren. Um einen externen Takt zu generieren, habe ich nun den Attiny13a aus dem Einsteigerpaket genommen, und einen früheren Code für einen Blinker draufgespielt und den Ausgang für die LED an XTAL1 des Atmega324a geklemmt.
Assemblercode vorher:
.include "tn13Adef.inc"
ldi r16,0b00001
out DDRB,r16
ldi r16,0b11110
out PORTB,r16
loop:
sbi PORTB,0
cbi PORTB,0
rjmp loop
Verstehe ich das richtig, dass der Ausgang nun im selben Takt des Attinys schaltet? Wenn ich das Datenblatt richtig interpretiere wären das knapp 9,6 Mhz. Im Datenblatt des Atmega324a lese ich, dass der interne Os. Mit 8Mhz läuft. Nun dachte ich, dass ich den Takt mindestens um ein vierfaches verlangsamen muss (kleine Schleife in Assembler, die nach jedem schalten bis 3 hochzählt). Allerdings bekomme ich weiterhin die Nachricht vom avrdude:

avrdude: auto set sck period (because given equals null)
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
avrdude: Expected signature for ATMEGA324P is 1E 95 08

Kann mir einer sagen, wie ich den richtigen Takt für den Attiny13a einstelle und mit welcher Baudrate ich dann den Atmega324a ansprechen kann (bisher –B60)?

Schonmal Danke für jeden Tipp!


Anhang:
Falsch gestellte Fusebits: -U lfuse:w:0x00:m -U hfuse:w:0x99:m -U efuse:w:0xff:m
Wären die Fusebits so richtig gestellt?: -U lfuse:w:0x7e:m -U hfuse:w:0x99:m -U efuse:w:0xff:m


(Generiert über http://www.engbedded.com/fusecalc/)

Hubert.G
10.12.2012, 15:50
Der Ausgang schaltet mit einem 1/4 der Taktfrequenz, da sbi und cbi jeweils zwei Takte benötigen. Der Takt sollte so hoch wie möglich sein.
Die Einstellungen für avrdude kenne ich allerdings nicht, ich arbeite mit dem AVR-Studio.
Beim 324P solltest du noch CKDIV8 abschalten und auch JTAG, wenn du ihn nicht brauchst.

- - - Aktualisiert - - -

Was mit noch gerade auffällt, Mega324A und Mega324P haben eine unterschiedliche Device-Signature.
Also das richtige Device einstellen.

Lif
10.12.2012, 19:40
Hallo Hubert.G!
Erst einmal Danke für deine schnelle Antwort!

Wenn ich das richtig verstehe sollte ich den Assemblercode so lassen wie er oben steht (ohne Verzögerung). Werde die Einstellungen mit CKDIV8 und JTAG übernehmen sobald er läuft ;-) danke dafür!

Das Problem mit der Device-Signature hatte ich gehofft durch das -F " Override invalid signature check." lösen zu können.
Da er mir als Signature 0x000000 rausgibt, vermute ich, dass er keinerlei Antwort bekommt.

Hat jemand einen weiteren guten Rat? (Benutze den USBASP Programmer)

Gruß

HeXPloreR
10.12.2012, 19:53
versteh ich jetzt nicht ganz: Du wolltest auf externen Quarz umstellen und hast das auch getan - ohne einen externen Quarz zu haben den Du anschliessen könntest?.... hast Du einen Quarz? Kannst Du den nicht einfach anschliessen. Dann würde er ggf nicht mit korrekter Geschwindigkeit laufen, aber das könnte man danach wieder beheben?

Lif
10.12.2012, 21:04
Hey HeXPloreR,
ich habe die Fusebits dummerweise verdreht und somit anstatt auf einen externen Quarz fälschlicherweise auf Quarzoszillator gestellt. Somit kommt mein angeschlossener Quarz nicht in Schwingungen :-/
Nun habe ich versucht mit Hilfe der Tipps (https://www.roboternetz.de/community/www.mikrocontroller.net/articles/AVR_Fuses) meinen zweiten Mikrocontroller als Taktgeber zu nutzen. Allerdings ohne Erfolg.

Dank der genialen und schnellen Unterstützung vom Guloshop ist das Problem gelöst.
"1.
rjmp benötigt zwei CPU-Takte für den Sprung, das heißt, dein "Oszillator" läuft unrund. Am besten, du fügst noch zwei nops ein:

loop:
sbi PORTB,0
nop
nop
cbi PORTB,0
rjmp loop

2.
Geh auf Nummer sicher und mach aus dem -B60 ein -B 600"

An dieser Stelle nochmals ein Danke an den Guloshop!
Kann ich wirklich nur empfehlen!