PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATMEGA644 Programmieren



Elektronik303
26.03.2007, 12:55
Hi,

Mit welchem Programm kann ich den Mega644 Programmieren (Mit so einem Selbstbau-ISP Adapter [Die Methode mit den zwei 1K Wiederständen an LPT])? Ich hab schon AVRDude probiert aber irgendwie klappt das nicht, ich muss wohl falsche Dateien haben. Gestern hat mir "Lot-lonar" im Chat schon dieses: http://avr8-burn-o-mat.aaabbb.de/ Programm gezeigt aber das geht mit meinem AVRDude irg. nicht. Kann mir einer einen Link zu der richtigen Version (Alle Dateien die ich brauche um mit diesem AVR8 BURN O MAT zu arbeiten) geben oder mir ein anderes Programm mit dem das Programmieren des ATMega644 möglich ist vorschlagen?

Mfg

Elektronik303

SprinterSB
26.03.2007, 17:45
Wenn die avrdude.conf nicht passt, dann kannst du dort eigene Portzuordnungen definieren. Schau dir die -conf mal an, dann siehtst du, wie deine Portzuordnungen zu umschreiben sind.

Du legst dann einen eigenen Progger an und übergibst dessen Name als -c Option beim avrdude-Aufruf.

Eigentlich solle der "dapa" passen?


programmer
id = "dapa";
desc = "Direct AVR Parallel Access cable";
type = par;
vcc = 3;
reset = 16;
sck = 1;
mosi = 2;
miso = 11;
;

Elektronik303
26.03.2007, 21:29
Hmm also das hab ich jetzt eingefügt und unter Optionen eingestellt aber dann sagt mir dieser BurnOmat das hier: C:\WinAVR\bin\avrdude.exe -q -u -C C:\Dokumente und Einstellungen\NameZensiert^^\Desktop\AVR\avrdude.c onf -p m644 -P lpt1 -c dapa -E noreset,novcc -U efuse:v:0xFF:m -U hfuse:v:0x99:m -U lfuse:v:0x62:m
error at C:\Dokumente und Einstellungen\NameZensiert ^^\Desktop\AVR\avrdude.conf:513 unrecognized character: "@"


Häh @ wird nicht unterstützt oder was? Kann mir mal einer seine .conf geben? Und am besten auch gleich die Avrdude.exe. Das wär echt supernett!

SprinterSB
26.03.2007, 22:19
Escape die Leerzeichen in deinen Pfadnamen, sonst kommt zB "und" als eigener Übergabeparameter an avrdude.

Den Entwickler, die sich Leerzeichen in Startdardpfaden überlegt haben, gehört der XXX-selber-zensiert-XXX versohlt.

Elektronik303
26.03.2007, 22:46
Hmm jetzt kommt das: C:\WinAVR\avrdude.exe -q -u -C C:\avrdude.conf -p m644 -P lpt1 -c dapa -E noreset,novcc -U flash:v:C:\LCD.HEX:a
error at C:\avrdude.conf:340 unrecognized character: "g"

also das muss ja jetzt an der .conf liegen weil im Dateinamen ja gar kein "g" mehr existiert... ES IST HOFFNUNGSLOS :-(

SprinterSB
27.03.2007, 09:31
Deine .conf muss zur .exe passen. Wenn zB die .conf zu neu ist und Progger ubeschreibt, die die .exe noch nicht kennt, gibt's nen Fehler. Die .conf ist ne Textdatei und die Fehlerzeile ist die 340.

avrdude 5.3.1 ist aud meiner HP, hast du das genommen? Dann ist omöglich ein Tippfehler drin, weil ich meine eigenen Progger rausgeschmissen hab.

Elektronik303
27.03.2007, 11:23
C:\avrdude.exe -q -u -C C:\avrdude.conf -p m644 -P lpt1 -c dapa -E noreset,novcc -U efuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\efuse43 45.hex:r -U hfuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\hfuse43 44.hex:r -U lfuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\lfuse43 43.hex:r
avrdude.exe: can't open device "giveio"

avrdude.exe: failed to open parallel port "lpt1"

Jetzt wisst ihr zwar mein Vornamen aber naja ;-) So was ist das jetzt? Wieso ist da jetzt was mit dokumente und einstellungen? Ich hab AVRDude in c:\WinAVR und die avrdude.exe und .conf einfach in C:\

Und wieso kann er lpt1 nicht finden? Ich hab nur ein LPT Port und das ist lpt1...

SprinterSB
27.03.2007, 12:15
Unter XP braucht man Admin-Rechte, um auf den ParPort zuzugreifen. Diese bekommst du mit der giveio, die bei WinAVR anbei ist.

Elektronik303
27.03.2007, 13:07
Hmm also ich hab admin rechte und es funkt. auch nicht wenn ich im abgesicherten modus beim anmelden "Administrator" auswähle... Aber wie funktioniert den diese giveio.bat? Also da ist install_- remove_- und status_giveio.bat

SprinterSB
27.03.2007, 15:03
install installiert
remove entfernt
status zeigt den Zustand

im abgesicherten Modus weiß ich net, ob da überhaupt was funzt

Elektronik303
27.03.2007, 18:30
Geht immernoch nicht, kommt genau das gleiche, aber wenn ich install, remove oder statusgiveio.bat ausführe läuft das ne sekunde und beendet sich, ich dachte mir das ist normal, aber das status sich beendet ist irg. komisch... Hmm gibts denn noch alternativen zu dem AVRDude? AvrStudio unterstützt den doch und kann auch .hex's laden, dann könnte ich weiter mit Bascom arbeiten, aber unterstützt der auch meine art von ISP?

SprinterSB
27.03.2007, 19:00
Natürlich ist der Aufruf sofort fertig, es werden ja nur Dienste gestartet/angehalten/Statusbericht gemacht.

Was sagt denn giveio? Könnte etwa so aussehen:



>status_giveio.bat
status of giveio:
stat failed (status 1060):
Der angegebene Dienst ist kein installierter Dienst.

ERROR: Status querry for giveio failed

>install_giveio.bat
Copying the driver to the windows directory
target file: C:\WINNT\giveio.sys
1 Datei(en) kopiert.
Remove a running service if needed...
Installing Windows NT/2k/XP driver: giveio
installing giveio from C:\WINNT\giveio.sys... ok.
starting giveio... ok.
set start type of giveio to auto... ok.
Success

>status_giveio.bat
status of giveio:
Type: [0x01] Kernel driver.
Start Type: [0x02] Automatic
Error Control: [0x01] NORMAL: Display a message box.
Binary path: \??\C:\WINNT\giveio.sys
Load order grp:
Dependencies:
Start Name:
ok.

Elektronik303
27.03.2007, 19:48
Also so schnell kann ich das garnich lesen ^^ Ich glaub die Sekunde wahr etwas übertrieben, er so 0.3 sekunden... Also kein Plan was die sagen...

SprinterSB
27.03.2007, 23:09
Sachma, was treibst du denn???

Mach ne Console, Shell, Eingabeaufforderung auf und tipps die Kommandos ein und *Bummer* und fertig...

Elektronik303
28.03.2007, 10:41
So ok, jetzt kann ichs dir sagen ;-) Also egal welche ich ausführe kommt immer "Der Befehl "loaddrv" ist entweder falsch geschrieben oder konnte nicht gefunden werden"

SprinterSB
28.03.2007, 10:51
Hast du ne zerbröselte WInAVR-Installation?

loaddrv steht ebenfalls in <WinAVR-INSTALL-DIR>\bin

Stimmen denn dein Pfad (Umgebungsvariable %PATH%)? Dieser muss <WinAVR-INSTALL-DIR>\bin und <WinAVR-INSTALL-DIR>\utils\bin enthalten.

Oder er enthält . und du stehst in <WinAVR-INSTALL-DIR>\bin

Elektronik303
28.03.2007, 11:56
geht immernoch nicht... Egal was ich versuche... Das ist doch unglaublich...

SprinterSB
28.03.2007, 12:22
Das loaddrv.exe steht da wo es soll? Dann *muss* es auch gefunden werden und ausgeführt werden. Es sei denn, du hast nicht die Rechte dazu.

Anstatt "geht" nicht" wären detailiertere Fehlermeldungen hilfreich -- im Endeffekt auch dir.

Geh mal in das Verzeichnis wo das steht und führ folgende Kommandos aus:

pwd
echo %PATH%
ls -al
install_giveio.bat


Und poste hier was raukommt und *bitte* in Code-Tags.

Elektronik303
28.03.2007, 13:43
ok hab ich gemacht also hier mal alles was der sagt


C:\WinAVR\bin>pwd
Der Befehl "pwd" ist entweder falsch geschrieben oder konnte nicht gefunden werden

C:\WinAVR\bin>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32 \Wbem;C:\Programme\T-Online\T-Online Software_6\Basis-Software\Basis2\

C:\WinAVR\bin>ls -al
Der Befehl "ls" ist entweder falsch geschrieben oder konnte nicht gefunden werden

C:\WinAVR\bin>install_giveio.bat
Copying the driver to the windows directory
target file: C:\WINDOWS\giveio.sys
1 Datei(en) kopiert.
Remove a running service if needed...
Der Befehl "loaddrv" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Installing Windows NT/2k/XP driver: giveio
Der Befehl "loaddrv" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
ERROR: Installation of giveio failed


Also was mich jetzt wundert ist dieses T-Online da bei %PATH%. Kanns sein das T-Online die Umgebungsvariablen ändert?

SprinterSB
28.03.2007, 14:41
Du hast, wie gesagt, keine korrekte Installation von WinAVR!

Installier das nochmal und Clicke beim Installationsdialog "add path to blabla" (weiß nicht mehr wie der Text genau lautet) auf Ja/Yes/Ok.

Alternativ fügst du die Pfade in

Arbeitsplatz -> Eigenschaften -> Erweitert -> Umgebungsvariablen -> path

hinzu

Elektronik303
28.03.2007, 17:56
Klappt schon besser, danke!
Jetzt kommt das hier bei AVR8 Burn-O-Mat:


C:\WinAVR\bin\avrdude.exe -q -u -C C:\WinAVR\bin\avrdude.conf -p m644 -P lpt1 -c dapa -E noreset,novcc -U efuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\efuse66 62.hex:r -U hfuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\hfuse66 61.hex:r -U lfuse:r:C:\DOKUME~1\ANDEAS~1\LOKALE~1\Temp\lfuse66 60.hex:r

avrdude.exe: AVR device not responding
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.


avrdude.exe done. Thank you.



Heißt das der AVR wird nicht gefunden? Also Hardware technisch?

SprinterSB
28.03.2007, 21:24
Sieht doch gut aus! (Im Vergleich zu vorher)

Ja, ist ein Problem mit deiner Hardware:
-- Progger-HW passt nicht zum Progger der in dude angegeben ist
-- µC ist nicht ansprechbar (fehlt, keine Spannung, hat keinen Takt, Fuses verstellt, ...)
-- ParPort Einstellungen nicht bidirektional

...

Elektronik303
28.03.2007, 21:55
Also Hardwaretechnisch müsste alles in Ordnung sein. Ich hab einen externen 20 Mhz Quarz dran sonst aber auch nicht alzu viel. Ausgewählter Progger müsste ja stimmen, hast ja selber gesagt "dapa" passt bei der ISP Methode mit den zwei Wiederständen. Hmm was heißt den bidirektional in diesem Fall?

SprinterSB
28.03.2007, 22:08
Kommt immer drauf an, wo was wie angeschlossen ist. Ich brauch jetzt nicht vorzurechnen, wieviel Möglichkeiten es dazu gibt. Die Pinbelegung siehst du im comf und kannst es da gegebenenfalls anpassen.

Elektronik303
28.03.2007, 22:24
Also das mit dem bidirektional hab ich jetzt im bios auf das andere eec/eep oder wie das hieß gesetzt.
Hab ich das in der conf richtig gesehen?


programmer
id = "dapa"; (Name)
desc = "Direct AVR Parallel Access cable"; (Auch Name)
type = par; (Wo programmiert wird, also ParPort)
vcc = 3; (Wo das Kabel das mit Vcc verbunden ist auf dem SUB-D liegt -- Auf dem Schaltplan stand das GND auf Port 24-25 gelegt wird, von Vcc ist dort keine Rede)
reset = 16; (Wo das Kabel das mit reset verbunden ist auf dem SUB-D liegt)
sck = 1; (Wo das Kabel das mit sck verbunden ist auf dem SUB-D liegt)
mosi = 2; (Wo das Kabel das mit mosi verbunden ist auf dem SUB-D liegt)
miso = 11; (Wo das kabel das mit miso verbunden ist auf dem SUB-D liegt)
;
stimmt das so?

SprinterSB
28.03.2007, 22:38
genau. zudem werden die Signale nicht-invertiert ausgegeben. wenn dein Board en eigene Versrogung hat ist die vcc-einstelung egal.

Elektronik303
28.03.2007, 22:44
Also könnt ich sie auch weglassen (Also die Zeile löschen)? Oder soll ich sie auf einen freien Pin legen?

Elektronik303
28.03.2007, 23:11
Hmm das macht mich noch ganz negativ! Klappt trotzdem nicht, hab jetzt die Pins angepasst Vcc einfach auf ein unbenutzten Pin gelegt aber trotzdem nichts! :-(

Elektronik303
29.03.2007, 14:28
An irgendwas muss es ja liegen, Atmel kann ja nicht einfach AVR's auf den Markt stellen die sich fast garnicht initialisieren lassen ;-) Hat das den nicht schon irgendwann mal jemand anderes gemacht? Unmöglich kanns ja nicht sein...

SprinterSB
29.03.2007, 15:08
Die AVR lassen sich schon programmieren, recht einfach sogar.

--1-- Verwende ein kurzes Kabel! Am besten unter 1m und ohne Umschaltbox o.ä. dazwischen!
--2-- Ist das Par-Kabel in allen Leitungen durchverbunden? Miss das durch. Wenn es so ne billig-Version ist, die weniger als 25 Signale verbindet: ab in die Tonne damit!
--3-- Evtl fängst du Störungen ein, dann helfen bis zu einem gewissen Grad 100pF an den Signalen (µC-Seitig).

Elektronik303
29.03.2007, 16:34
Is halt selbstgebaut, Flachbandkabel ca. 70 cm. Ma gucken ob die signale durchkommen!

SprinterSB
29.03.2007, 16:47
Flachbandkabel

Schirmung ist kein Luxus. Momentan willst du mit 1MHz darüber und irgendwann mit 20MHz.

Elektronik303
29.03.2007, 17:29
wie meinst du das mit den Mhz? Der Übertragungstakt zwischen LPT und MC? Das is mir eig. egal, hauptsache es funktioniert erstmal...

Elektronik303
29.03.2007, 18:48
So, mir ist grad das allerlustigste aufgefallen, im Flachbandkabel drin (Also der Draht, nicht die Isolierung) war eine Lücke... Wir kann da ne Lücke drin sein? Produktionsfehler oder wat? looooool... Aber funktionieren tuts trotzdem nicht... :-(

Elektronik303
29.03.2007, 21:56
So, das Kabel war also schuld, hab jetzt n neues, und... ... ES KLAPPT!!! Ohne fehler, 10 von 10 mal ohne Fehler. Ich hab jetzt aber noch ein paar andere Fragen, ich hab jetzt ein Display da ran gelötet, klaptt aber noch nich ganz. ich verwende folgenden Code:


$lib "lcd4busy.lbx"
$regfile = "m644def.dat"
$crystal = 20000000

Config Lcd = 16 * 2
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3

Cls
Locate 1 , 1
Lcd "Hello world."

Config Pind.7 = Output
Portd.7 = 1
Do
Loop

Ich habe Db7 and PortC.7 bis Db4 and PortC.4. Dann hab ich Enable auf PortC.1, R\W and PortC.2 und RS and PortC.3. Die Kabel müssen stimmen hab ich geprüft. PortD.7 ist die Hintergrundbeleuchtung, die funktioniert. Es werden momentan nur schwarze balken in Zeile 1 angezeigt...
Was könnts sein? Fällt euch was im Code auf oder hat das Display ein weg?

Und dann hab ich noch ne Frage zu den Fusebits, CKSEL0 bis 3 müssen bei externem Quarz alle ausgestellt werden oder? Und wie ist das mit CKDIV8 und CKOUT?

SprinterSB
29.03.2007, 22:48
f'up BASCOM

AVRfan
29.03.2007, 23:01
Standard ist JTAGEN fuse programmiert und sind PC2 bis 5 für JTAG reserviert: nicht als I/O pins nutzbar. Mann kan entweder der JTAGEN fuse auf 1 zetzen oder im programm das JTD bit im MCUCR register 1 machen.

CKSEL3..1 auf 111 : Low power Crystal Oscillator 8 - 16 MHz = geht also nicht auf 20MHz!
CLSEL0 auf 1 : Start-up time setting

Meine meinung nach besser:
CKSEL3..1 auf 011 : Full Swing Crystal Oscillator 0.4 - 20 MHz
CKSEL0 auf 1 für Crystal.
Das macht also: CKSEL 3..0 = 0111.

CKDIV8 ist standard auf 0 und damit wird aus der 20MHz 20 / 8 = 2.5MHz. Mit CKDIV8 auf 1 geht er auf volle 20MHz.

CKOUT wie jetzt auf 1 sonst wird PORTB.1 der 20MHz ausgang statt normale I/O function.

Bitte selber controllieren! Denke auch daran dass in diesen bericht 0 bedeutet dass der fuse programmed ist, genau wie im Atmel datenblatt.

Martin.

Elektronik303
30.03.2007, 00:02
Lol nachdem ichs so eingestellt hab konnt ich nicht mehr programmieren :-( So eine schei*e... Ist der damit jezz im A**** oda was?

AVRfan
30.03.2007, 09:19
Nicht unbedingt... Schreib bitte mal die werte die in die verschiedene fusebytes gegangen sind (also die ganze bytes).


Ich hab einen externen 20 Mhz Quarz dran sonst aber auch nicht alzu viel. Da sind doch auch die zwei condensatore dran?

Versuche mal mit einen 4 oder 8MHz quartz.

20MHz geht nur bei Vcc > 4.5V.

Ich habe die CKSEL = 0111 noch mal nachgesehen und glaube dass stimmt schon.

Martin.

Elektronik303
30.03.2007, 12:48
Joa ich hab 5 V dran, hab keinen 4Mhz mehr da, die Fusebits kann ich dir so spontan garnicht mehr sagen, hab das so eingestellt wie du es gesagt hast. Die 22pF Kondensatorn hab ich natürlich dran, aber irgendwie...

AVRfan
30.03.2007, 13:13
Also wenn keinen andere quartz vorhanden ist wurde ich mit den kondensatore experimentieren: die sollen im bereich 12-22p liegen.

Das datenblatt (februar 2007) sagt
The frequency ranges are preliminary values. Actual values are TBD. aber ich nehme an der obere grenze ist 20MHz wenn es einen ATmega644-20 ist. Trotzdem wurde ich in diesen fall mal versuchen mit einen langsameren quartz.

Wenn doch einen falsche takt quelle im CKSEL fuses steht kann man auch versuchen einen 1MHz takt an zu bieten am XTAL1 pin.

Martin.

Elektronik303
30.03.2007, 14:14
Ich hab noch einen mit 4Mhz gefunden, aber hier erstmal die meldung die ich von dem "Burn-O-Mat" krieg:


C:\WinAVR\bin\avrdude.exe -q -u -C C:\WinAVR\bin\avrdude.conf -p m644 -P lpt1 -c ISP -E noreset,novcc -U efuse:w:0xFF:m -U hfuse:w:0x99:m -U lfuse:w:0x62:m

avrdude.exe: AVR device initialized and ready to accept instructions
avrdude.exe: Device signature = 0x000102
avrdude.exe: Expected signature for ATMEGA644 is 1E 96 09
Double check chip, or use -F to override this check.

avrdude.exe done. Thank you.


Also finden tut er den AVR. Nur halt programmieren lässt er sich nicht...
Ich hab mal ein Bild von den Fuses angehängt, bitte auch den von mir rot makierten kasten unten beachten, wo steht das Fuses mit Häckchen=0 und ohne Häckchen=1 sind (Hab ich auf jeden Fall so verstanden, weil dahinter Bit=0/1 steht) Angenommen das hätte ich falsch verstanden, wäre er dann noch zu retten?

AVRfan
30.03.2007, 15:04
Die meldung ist also mit den 20MHz quartz gemacht?


Device signature = 0x000102 weist meinen meinung nach auf störungen in der ISP signale. Kann man bei avrdude die ISP geschwindigkeit ändern? Ist der ISP flachband kabel zu lang?

Das Bild von den Fuses sieht gut aus, Fuses mit Häckchen=0 stimmt. Wenn die so in den AVR geschickt sind steht CKSEL3..0 auf 0111 und ich meine immer noch dass ist correct ;). In diesen zustand läuft der AVR mit 0.4MHz bis 20MHz und mit CKDIV8 auf 1 wird dieser frequenz nicht geteilt. Versuche doch mal mit den 4MHz quartz.

Wenn die CKSEL3..0 invertiert wurden stehen die auf 1000 was bedeutet dass der AVR einen 400kHz - 900kHz resonator erwartet, ohne Kondensatore. In zum beispiel IR fernbedienungen werden 455kHz resonatore verwendet, kann man auch versuchen. Allerdings muss dan avrdude auf einen langsamere ISP geschwindigkeit arbeiten, etwa 100kHz?

Martin.

Elektronik303
30.03.2007, 16:42
Hmm aber das komische ist ja das es direkt nach dem ändern der fuses nicht mehr geklappt hat, davor gings ja. Ich werd ma den 4 Mhz einbauen

AVRfan
30.03.2007, 16:51
Bevor dem ändern der fuses wurde der quartz gar nicht benutzt: der AVR lief auf internen takt. Wenn mann durch ändern der fuses umschaltet und der neue takt läuft nicht: probleme!

Martin.

Elektronik303
30.03.2007, 16:59
Ohhhhh ein leises Glücksstöhnen, er funktioniert wieder. Was soll ich jetzt machen? Alle auf Standart setzen und den externen Quarz entfernen? Is mir jetzt sowieso am liebsten, wenn er alles auf Standart hat läuft er ja über den internen ne?

EDIT: Hab ihm jetzt alles auf Standart mit den Fuses, kann ich den externen jetzt ablöten?
Hab ma die Fuses wo wie se jetzt sind dran gehängt

AVRfan
30.03.2007, 17:37
Den externen jetzt ablöten ist ok, fuses sind richtig für internen takt: 8MHz durch 8 ist 1MHz.

Wenn das LCD an PORTC angeschlossen ist: PORTC bits 2 bis 5 sind jetzt reserviert für JTAG. Bitte der JTAGEN fuse unchecked machen (oder im programm das JTD bit im MCUCR register 1 machen), erst dann functionieren alle I/O functionen auf PORTC und bekommt das LCD richtige daten.

Martin.

Elektronik303
30.03.2007, 17:44
Aso na dann is das mit dem LCD ja logisch, wenn ich CKDIV8 unprogrammed mache sinds 8Mhz auf dem er läuft oder?

AVRfan
30.03.2007, 17:53
8MHz geht nür wenn im LCD programm die delays auf 8MHz takt berechnet wurden, ich kann dass naturlich nicht sehen ;). Versuche das bitte erst mal mit 1MHz.

Martin.

Elektronik303
30.03.2007, 19:36
So das mit dem Display klappt bisher ganz gut, ich schalt dann jetzt ma auf 8 Mhz

EDIT: Klappt auch! Danke an alle die mir geholfen haben (auch wenns eine sehr schwere geburt war :-({|= )