PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taktgenerator (mit Atmega) für Atmega644 mit Low-Freq Fuse



C_Classic
03.05.2010, 17:39
Hey,
ich habs hinbekommen meinen AtMega644 zu verfusen. Hab ihn auf externen Takt - Low-Freq. Crystal eingestellt. Das sind doch nun Frequenzen von etwa 32khz oder so?
Jetzt habe ich aber leider keinen 32khz Quarz, jedoch müsste ich das Taktsignal doch mit nem anderen Atmega (mit 16MHZ) erstellen können.
Wie sieht dazu der Code und die Hardware dazu aus? Reicht es einfach nen Pin des einen Atmega mit XTAL1 des Mega644 zu verbinden?

Würde folgender Code funktionieren? (bei meinem ersten Test gings nicht)

...
int main(void) {
DDRB = 0xff;

while (1) {
PORTB=1;
_delay_us(31);
PORTB=0;
_delay_us(31);
}
return 0;

}

Welche Einstellungen brauch ich bei avrdude (Takt niedriger einstellen?)

Danke für eure Hilfe.

syn_error
04.05.2010, 23:14
Hab ihn auf externen Takt - Low-Freq. Crystal eingestellt. Das sind doch nun Frequenzen von etwa 32khz oder so?
diese einstellung ist gedacht für einen uhrenquarz.


Reicht es einfach nen Pin des einen Atmega mit XTAL1 des Mega644 zu verbinden?
hab ich noch nicht versucht aber wenn dann sollte es so funktionieren.


bei meinem ersten Test gings nicht
was heißt ging nicht, ist das programm nicht angelaufen oder du kannst mit dem isp programmer nicht darauf zugreifen?


Würde folgender Code funktionieren?
ja, aber warum 16129hz?
wie du schon richtig erkannt hast liegt die frequenz bei ca. 32khz um genau zu sein 32768hz.
jedoch hast du bei so einer niedrigen frequenz ein problem mit dem isp programmieren da der isp takt nur 1/4 der target frequenz haben darf und das wäre dann hier 4032hz.

ich würde versuchen eine frequenz von ca. 1Mhz an den AtMega644 anzulegen das man auch mit dem programmer zugriff bekommt da die isp taktrate nun <=250khz haben darf.

oberallgeier
05.05.2010, 11:13
Hi,

... ich habs hinbekommen meinen AtMega644 zu verfusen ...Na bitte - so etwas ist doch nicht schwer, oder? *ggg* Aber Du musst Dir jetzt keinen Rettungscontroller programmieren, um das gute Teil wieder aus dem Koma zu bekommen. Ich habe nämlich extra dafür Gehirnschmalz aufgewendet und eine "Fuseretter" gebaut. Einfach und problemlos. Schau mal hier hinein (https://www.roboternetz.de/phpBB2/viewtopic.php?p=476536#476536&sid=36d10bc6a8c11f4cb6739653a04fbbc5), nimm die dort verlinkte "Einfachversion" - und schreib dann bitte, obs das ist was Du suchst und obs geklappt hat.

Viel Erfolg

chientech
09.05.2010, 14:47
Hi,

ich hab das schon mal genau so gemacht wie du es nun vor hast.


Reicht es einfach nen Pin des einen Atmega mit XTAL1 des Mega644 zu verbinden?
GND der Controller ebenfalls verbinden O:)

syn_error:

ich würde versuchen eine frequenz von ca. 1Mhz an den AtMega644 anzulegen das man auch mit dem programmer zugriff bekommt da die isp taktrate nun <=250khz haben darf.
so hab ich das damals auch versucht und es ging auch auf anhieb.

Probier einfach mal das:
mit XTAL1 an PB7

int main(void) {
DDRB = 0xff;

while (1) {
PORTB |= (1<<7);
//_delay_us(0);
PORTB &= ~(1<<7);
//_delay_us(0);
}
return 0;

}
Compiler ohne Optimierung
falls es nicht gleich klappt erhöhe langsam den delay.
Wenn ich es aber noch richtig im Kopf hab ging es so.

p.s. vergiss nicht über Erfolg und Misserfolg zu berichten.

mfg ch

C_Classic
09.05.2010, 16:10
Hallo,
erstmal sorry, dass ich mich so lang nicht gemeldet habe. Irgendwie hatte ich immer was anderes zu tun und kam erst heute dazu.

Ich hab den Atmega644 mit der Methode von oberallgeier wieder zum laufen gebracht! Funktioniert ohne Probleme. (Ich hatte die Baudrate ungefähr 10 kbaud über der von deiner Version - ging aber trotzdem)

Aber danke auch an alle Anderen!


Jetzt hab ich jedoch noch mal ein Problem: Ich hab mir vor kurzem ein Dev-Board für mein GLCD gebaut. Auf dem Board habe ich ne ISP-Schnittstelle, deren Ports gleichzeitig noch an Tastern hängen. Aber ohne PullUps etc. - verwende die internen). Wenn ich nun über diesen Anschluss programmiere, geht eiegntlich jeder Versuch schief --> avrdude: Mismatch/L-Fuse geändert und das Programm läuft dann auch nicht.
Nun kam ich nach einer solchen Fehlermeldung nicht mehr auf den uC. Mit der Schaltung von oberallgeier gings dann kurz, konnte alles machen bis auf L-Fuse programmieren, da kam immer ne Fehlermeldung. Dann hab ich mal nen Chip-Erase gemacht und seitdem geht garnichts mehr. Weder HFuse noch erase... Der Chip ist übrigens ein Mega32.
Habt ihr ne Idee was mit dem Controller los ist bzw. wo der Fehler an meinem Board liegen könnte?

Ein paar Anmerkungen zum Board: Direkt unter dem uC (in der IC-Fassung) liegen 2 Kondensatoren von AREF nach GND. Die Taster an den ISP-Ports sind normalerweise nicht verbunden (wenn man se net grade drückt). Das GLCD(Datavision16080 - Pollin) hängt an PortC und an den letzten 3 Pins von Port D. Desweiteren verwende ich als Programmieradapter PonySer (s-huehn.de), habe jedoch eine Steckverbindung vom Programmerboard aufs ISP-Kabel und dann noch eine vom Kabel auf das DevBoard. Welche längen sind denn da maximal zu verwenden bzw. machen die Steckverbindungen was? Und ist der Kondensator unter dem Atmega ein Problem?

MfG C_Classic