PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit LCD Ansteuerung PORT C Atmega32 MHz Quarz



semicolon
24.05.2006, 16:25
Hallo zusammen

Ich habe folgendes Problem:

LCD 2x16 an PORT C im 4-Bit Modus

nach Ablauf der Initialisierung des LCD sollte alle Pegel des Port C auf Low sein, aber irgendwie sind dort Spannungen zwischen 2.5-5 zu messen.

Atmega32

Kann es sein das standartmässig nicht alle Ports des Atmega32 zu gebrauchen sind? Ist nicht noch auf einem Port das JTAG oder so?

znarfelektro
25.05.2006, 08:54
Achtung: Am Port C hängt standartmässig die I2C Schnitstelle daurch kann es zu Fehler kommen.
Bessere Wahlist Port B :!:

semicolon
25.05.2006, 09:53
Ah so ist das. Nur ein kleines Problemchen ergibts sich da bei mir. Ich habe bereits die meisten Ports von Port B für etwas anderes benötigt.


Ist es nicht möglich den Port C als normalen Ausgang zu konfigurieren? Ansonsten müsste ich alles mühsam umlöten und das möchte ich schon nicht. Sollte doch möglich sein, oder?

PasstScho
25.05.2006, 12:46
Hi,
Ich glaube nicht dass es was mit der I²C Schnittstelle zu tun hat.
Wenn ich mich recht erinnere war am Portc das JTAG Zeugs.
Wenn du die Pins selber benutzen willst musst du mit den Fuses JTAG abschalten.

MfG Alex

semicolon
26.05.2006, 09:17
Leider habe ich das mit den Fuses nicht besonders gut im Griff. Kommt vielleicht auch davon, dass mein Programmer Tool nicht besonders ein gutes ist. Jedenfalls für das Programm auf den Atmega32 zu programmen reicht es aus.

Ist das avrdude-gui.exe. Ist glaub im WinAVR Packet dabei. Dort habe ich nicht besonders ahnung mit den Fuses.

Hat jemand schon mit diesem Tool gearbeitet und weiss, wie ich die Fuses richtig setzten muss? Habe auch gehört, dass das JTAG auch während der Laufzeit deaktiviert werden kann. Hat jemand vielleicht eine Code um die auszuführen?

Währe toll. Und danke

izaseba
26.05.2006, 09:48
warum ist avrdude


nicht besonders ein gutes
:-k

Ich hatte mal zwischendurch Ponyprog ausprobiert, dann wieder gelöscht und avrdude weiter benutzt.


Habe auch gehört, dass das JTAG auch während der Laufzeit deaktiviert werden kann.

Wo wird sowas erzählt?

semicolon
26.05.2006, 10:05
Ich bin mir nicht mehr sicher, aber ich dachte ich hätte es mal in diesem Forum gelesen. Kann sein das ich das verwechsle.

Ich finde übrigens avrdude nicht schlecht, nur das mit den Fuse Bits ist mir nicht ganz so geheuer. Aber wenn du es ja gut findest, könntest du mir vielleicht sagen welche Fuse ich setzten muss, damit ich den Port C normal verwenden kann?

izaseba
26.05.2006, 10:11
ja, also versuchen wir es *Dattenblatt M32 such*

Fuse High -> Bit 6 JTAGEN

Ich kenn gui für avrdude nicht, ABER ERST FUSES AUSLESEN dann den von mir genannten Bit umstellen und erst dann schreiben.

Ich hoffe, daß Du so weiterkommst

Gruß Sebastian

semicolon
26.05.2006, 10:25
Ok ich werde es mal so versuchen. Habe das Datenblatt bereits ein paar Mal durchgelesen. Bin aber nicht ganz so wirkich nachgekommen.

Im Anhang habe ich noch ein Printsreen von dem avrdude-gui erstellt, damit du siehst von was ich rede.

izaseba
26.05.2006, 10:34
Danke für das Bild,
Ja super, also wie gesagt HIGH Fuse auslesen Hex in Taschenrechner in bin umrechnen bit 6 Beispiel 10011001 ändern, in hex umrechnen fertig.

P.S.
Dattenblatt Seite 255

Gruß Sebastian

semicolon
26.05.2006, 10:52
ok vielen Dank für deine tolle Unterstützung. Jetzt sollte es dann eigentlich schon klappen.

semicolon
26.05.2006, 11:38
noch kurz eine Verständnisfrage: Muss ich also das Fuse Bit nr. 6 auf 1 setzten damit ich den JTAG disable?

izaseba
26.05.2006, 11:49
Ja Bit Nr. 6 es wird immer von rechts nach links (wie in China) gezählt und damit das noch lustiger ist bei 0 angefangen :wink:
Beispiel


1 0 1 0 1 0 0 0 <-Bits
7 6 5 4 3 2 1 0 <-Numerierung


Wie schon gesagt im Dattenblatt ist es auch so angegeben nur Vertikal...

Pascal
26.05.2006, 12:06
Zitat:

Habe auch gehört, dass das JTAG auch während der Laufzeit deaktiviert werden kann.


Wo wird sowas erzählt?

Das stimmt schon, man kann das JTAG-Interface auch während der Laufzeit deaktivieren. Siehe Datenblatt vom ATMega16 auf Seite 229. Dazu dient das JTD(JTAG Interface Disable) im MCUCSR-Register. Um es zu deaktivieren muss dieses Bit innerhalb von vier Taktzyklen zweimal auf 1 gesetzt werden, zum aktivieren zweimal auf 0.

semicolon
26.05.2006, 12:10
eben doch. Frag nur: Ist das auch beim Atmega32 der Fall oder nur ein spezialfall des Atmega16?

izaseba
26.05.2006, 12:19
Yep, stimmt in der Tat, nur ob es den gleichen Effekt bringt, wie den Fuse abzuschalten ?

Pascal
26.05.2006, 12:21
Das funktioniert auch beim ATMega32. Siehe dessen Datenblatt auf Seite 226.



Yep, stimmt in der Tat, nur ob es den gleichen Effekt bringt, wie den Fuse abzuschalten ?

Man kann dann jedenfalls die Pins als GPIO-Pins benutzen.

semicolon
26.05.2006, 12:22
dann ist mir doch die Geschichte mit den Fuse lieber. Den da bin ich sicher dass das Ding auch disable ist.

izaseba
26.05.2006, 12:31
dann wäre das auch mit :


cli();
MCUCSR|=(1<<JTD);
MCUCSR|=(1<<JTD);
sei();

auch erledigt...
Naja ein Versuch ist es schon Wert
Ich kam noch nie dabei raus, weil ich den JTAG eh standardmäßig deaktiviere.
Und wieder was dazugelernt :-)

Gruß Sebastian

Pascal
26.05.2006, 12:46
Ich kam noch nie dabei raus, weil ich den JTAG eh standardmäßig deaktiviere.

Ich hab des bisher immer so gemacht, da ich mich nicht mit den Fusebits beschäftigen wollte. Wurde aber dann doch nötig, als ich einen externen Quarz gebraucht hab. ;-)

semicolon
26.05.2006, 18:18
Hallo Leute

Ich hatte endlich mal Zeit um das Hight Fuse Bit auszulesen. Leider ist dies nicht gerade eine tolle Sache mit diesem Gui. Muss eine datein angeben in welche er den Wert dann rein schreibt. Dies auch nicht in hex sondern in einem Sonderzeichen. Jetzt weiss ich nicht, ob ich anhand der Ansi-Tabelle den hex-Wert 1:1 auslesen kann oder nicht?!

Kann mir vielleicht jemand sagen, wie ich diese besser mit dem Cmd machen könnte?

Danke für eure Hilfe

izaseba
26.05.2006, 21:43
Hallo,
Ich hab mir Dein Screenshot nochmal angeguckt ( ich muß mir das Teil unbedingt installieren, sonst kann ich nur bedingt helfen....)
Da ist eine Option -t Terminal mode :-)

Machmal Klick drauf, ich hoffe Du kommst damit in den Terminal Modus...

wenn ja tippe mal


read hfuse


Damit kriegst Du den angezeigt \:D/


schreiben geht, wer hätte es gedacht


write hfuse 0 0xHEX


wobei HEX die hex Zahl ist......

Ich hoffe, das klappt so 8-[

Gruß Sebastian

semicolon
26.05.2006, 22:07
Also ich hab das mal versucht. Leider stürzt das avrdude komplet ab. Muss den Prozess via Taskmanager abschiessen.

Muss ich nach dem -t Eingabe direkt in den command-Bereich schreiben oder sollte da noch ein zusätzliches Fenster aufgehen.

Ich dank dir schon jetzt für deine Hilfe. War nicht meine Absicht, dich so auf Trab zu halten.

semicolon
26.05.2006, 22:15
ok ich habe es doch noch geschafft, aber nicht via Gui sonder via der Windows-Konsole.

Also der Wert ist nun für das hfuse : 0x99 und
lfuse: 0xE1

Manchmal kommt noch die Meldung dass ich keine Fuse Bits ändern kann. Wie muss ich nun weiter vorgehen. Ich möchte nicht unbedingt einen neue Atmega32 kaufen, wenn die Geschichte mit den Fuses nicht richtig hinkriege. Deshalb wäre ich doch noch glücklich ein paar Antworten zu erhalten.

izaseba
26.05.2006, 22:28
War nicht meine Absicht, dich so auf Trab zu halten

Ach was, so ein Quatsch, wenn ich Dir sag, daß avrdude gut ist, muß ich auch dafür gerade stehen, und warum soll ich nicht helfen ?

Also ein read hfuse im Terminal ergibt 0x99, es ist auch ein Standardwert bein jungfräulichem M32 :-)
Nach bin ergibt das dann 10011001
ein Blick ins Dattenblatt bestätigt das....
wie wollen aber 11011001 haben -> hex 0xD9

dann Tippe im Terminal
write hfuse 0 0xD9

kannst nochmal mit read nachgucken, ob es geklappt hat.

von lfuse läßt Du die Finger, wir wollen sonst nichts ändern.

*HIERMIT ÜBERNEHME ICH KEINE VERANTWORTUNG FÜR SCHÄDEN AN DEINEM MEGA*

Aber Kopf hoch ich bin ein stolzer Besitzer eines STK500, wenn was ist kannst Du mir Deinen Mega zuschicken, ich Programmiere den wieder um :lol: .
Aber Scherz bei Seite, so müßte es schon klappen...
hier (http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=&P=ATmega32)gibt es einen Fuse Calculator, zum nachgucken, der sagt auch wir müßen 0xD9 setzen, was sagst Du ?

Gruß Sebastian

semicolon
26.05.2006, 22:33
ist ok, aber leider fällt er wieder zurück auf 0x99 nach dem ich mein Programm daraufgeladen hatte. Er sagt dann, dass er zwar 0xd9 gelesen hat, schreibt aber wieder den alten Wert 0x99 zurück. Ah noch kurz eine anderer Frage:

Ich betreib meine mega mit 4MHz, muss ich das noch an den Fuses einstellen oder ist standartmässig auf externen Crystal geschaltet?

izaseba
26.05.2006, 22:46
Ich betreib meine mega mit 4MHz

Bis Du Dir sicher ?
0xE1 für lfuse, wie Du oben schon geschrieben hast ist die Standardeinstellung und die ist 1 MHz Interner RC Osc.

Warum er allerdings auf 0x99 zurückspringt kann ich mir nicht erklären :-(
:-k .
Ich muß das wohl selber nachhacken.

Gruß Sebastian

semicolon
26.05.2006, 22:49
Tja, leider fällt er immer zurück. Hat das vielleicht etwas mit den lock-Bits zu tun? Aber ich denke mir, hier ist genau die Gefahr das etwas wirklich schieff gehen könnte.

So wie du mir schreibst, muss ich in dem Fall die lfuse umstellen damit er mit 4MHz externen Kristall läuft an den Pins Xtal1 und Xtal2???

Gruss Stefan

izaseba
26.05.2006, 23:06
versuch mal in der Windows-Konsole anstatt -t -U hfuse:w.0xD9:m
Vielleicht klappt es dann

Was den 4 Mhz Quarz angeht müßte der lfuse 0xEF sein

semicolon
26.05.2006, 23:35
tja ist auch nicht gegangen. Irgendwie fällt er immer wieder in den ursprünglichen Zustand zurück. Vielleich hängt dies doch mit den Lock bits zusammen.

semicolon
26.05.2006, 23:38
Hier noch die Meldung vom avrdude-gui

Vielleicht hilft dir das weiter!!!

Gruss Stefan

semicolon
26.05.2006, 23:47
jetzt geht er nicht mehr. Habe ihn wahrscheinlich gekillt. Habe nur die hfuse noch auf d9 ändern wollen mit der Win-konsole. Aber er hat irgendwie dann ff reingeschrieben. Tja muss halt ein neuer her. Irgendwie wollte er nicht so wie ich es gerne hätte.

izaseba
26.05.2006, 23:52
Moment mal wir sind nicht bei lfuse :-)
also in der Command line ist ein Fehler
es soll heißen -U hfuse:w:0xD9:m

Es soll auch laut Fehlerbeschreibung und manpage -u gewählt werden, also



-u -U hfuse:w:0xD9:m


Ich hoffe, daß es jetzt klappt :twisted:

Gruß Sebastian

EDIT:
Quatsch gekillt, das glaube ich nicht so ganz...

semicolon
26.05.2006, 23:58
es ist so, er erkennt die Device Signature nicht mehr. Kann ohne -F nicht mehr arbeiten.

semicolon
27.05.2006, 00:01
C:\Programme\Win_AVR\bin>avrdude -p m32 -c bsd -P lpt1 -F -u -U hfuse:w:0xD9:m

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0xffffff
avrdude: Yikes! Invalid device signature.
avrdude: reading input file "0xD9"
avrdude: writing hfuse (1 bytes):

Writing | | 0% 0.00s ***failed;
Writing | ################################################## | 100% 0.09s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xD9:
avrdude: load data hfuse data from input file 0xD9:
avrdude: input file 0xD9 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0xd9 != 0xff
avrdude: verification error; content mismatch

avrdude done. Thank you.

So siehts nun aus. Sieh ziemlich nach "minus 1 atmeg32" aus. Kann man das noch rückgängig machen?

izaseba
27.05.2006, 00:04
Prüfe Dein Programmierkabel, ob aller in Ordnung ist, wenn er Dir nicht erlaubt hat die Fuses zu ändern, was aus Deinem letztem Screenshot zu entnehmen ist, kannst Du Ihn damit auch nicht geschrottet haben.

Gruß Sebastian

semicolon
27.05.2006, 00:10
es ist so. Den letzten Post von mir mit der ganzen Konsole-Ausgabe ist massgebend. So siehts jetzt nur noch aus. er erkkent seine eigene Signatur nicht mehr; lfuse 0xff; hfuse 0xff und ohne der Option -F kann ich nichts mehr machen.