PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erste Schritte mit AVR Programmierung und natürlich Probleme



daywalker008
01.10.2008, 13:06
Hallo Leute, ich melde mich mal wieder, weil ich mich nun endlich an die Programmierung eines AVRs ran gemacht habe.
Dazu habe ich mir einen MysmartUSB Programmmer und dieses Board besorgt:
http://www.pretty-kunze.de/html/board.JPG
http://www.pretty-kunze.de/html/cpu.JPG

Jetzt wollte ich ersteinmal mit Bascom wie im Roboternetz beschrieben diesen Code auf die CPU schreiben:

$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes

$baud = 9600 'Die Baudrate für RS232 Ausgabe.
'Sie muss auch bei PC Terminalprogramm identisch sein
do
Print "**** RN-CONTROL sagt Hello World *****"
wait 1
loop


(Vorher war ein Programm drauf das auf dem LCD 1 bis 9 anzeigt aber das hab ich gelöscht)

Wenn ich dann auf Programm chip gehe meckert er erstmal das die cpu nicht übereinstimmt. Dann stell ich auf ATMEGA32 und sage write Buffer to Flash Rom.
Das tut er und meldet dann difference at 00096.
http://www.pretty-kunze.de/html/avrdruck.jpg

Wenn ich dann den Terminal emulator aufmache steht da auch nix obwohl doch da stehen müsste Hello World

Jetzt brauch ich eure Hilfe was hab ich falsch gemacht, ich komm ned weiter damit. Irgendwie muss das doch gehen, das der Processor defekt ist glaub ich ned weil er ja am Anfang funktioniert hat irgendwas im Programm falsch eingestellt? Ich weis nedmehr weiter
Für Ratschläge wäre ich sehr dankbar.

Dirk
01.10.2008, 15:23
Hallo daywalker008,

genau weiß ich es nicht.

Mir fällt nur auf, dass in deinem 2. Programm (das PC0 umschaltet) die Taktfrequenz nicht mit 16000000, sondern mit 6000000 angegeben ist.

Gruß Dirk

Bloodyben
01.10.2008, 16:20
mir als Anfänger würden 2 Sachen einfallen:

hast du den Programmer richtig eingestellt?

und schreib vielleicht mal ans Ende des Programmes "end", wobei ich nicht denke das man das braucht, da das Programm ja garnicht da hin kommt wegen der Schleife!

for_ro
01.10.2008, 17:33
Ich kenne jetzt den Mysmart USB-Programmer nicht, aber musst du dazu denn wirklich den AVR ISP Programmer auswählen (siehe deinen Screen-Dump), oder hast du den einfach nicht umgestellt?
Wenn nicht, geh mal in die Options unter Programmer und wähle einen passenden Programmer aus. Andere hier im Forum schreiben, man müsse einen AN910 kompatiblen auswählen. Such mal nach "mysmart".

Gruß

Rolf

daywalker008
01.10.2008, 18:08
Aaaalso,
hab jetzt ein "end" hinzugefügt und nach dem Brennen steht Verified OK da also hats doch geklappt oder?
WEnn ich dann den Terminalemulator öffne steht da aber nichts...

Ist doch noch nicht alles richtig oder wie bekomme ich den Text angezeigt?

Bloodyben
01.10.2008, 18:12
Du könntest noch versuchen das RS232 umzudrehen! Vielleicht hast du es falsch herum aufgesteckt!

daywalker008
01.10.2008, 18:17
Was meinst du denn jetzt mit RS232 falsch rum ? Wenn ich so blöd fragen darf?

Bloodyben
01.10.2008, 18:20
Ach ich sehe gerade... Du hast garkein RS232 Kabel angeschlossen oder? Ohne dieses kannst du natürlich auch nichts am PC empfangen!

du bräuchtest dann noch so etwas: http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=73&products_id=42

du könntest natürlich mal versuchen ob dein programm läuft, in dem du dein LCD konfigurierst und den text dann darauf ausgibst...

daywalker008
01.10.2008, 19:10
Naja so ein Anschluss hab ich ja am Board(siehe Bild) aber da kommt nix hab da nen Rs232 an usb Wandler dran und wenn ich den Port am Pc mit nem Terminalprogramm öffne keine Aktivität.

Woran kann das schonwieder liegen?


Alternativ: Hat zufällig jemand nen Code um irgendwas auf dem LCD auszugeben, wie gesagt ich befinde mich am Anfang der programmierung und kann nichtmal hello World ausgeben.
Was ich weis ist das das LCD im 4Bit Modus betrieben wird.
Aber weis nicht wie ich es ansteuern soll.

Bloodyben
01.10.2008, 19:17
einfach config in bascom eingeben. dann F1 drücken und dann bei config lcd nachlesen. unten ist dann auch ein beispielcode gegeben, mit dem du das hinbekommen solltest!

daywalker008
01.10.2008, 20:08
ok dann arbeit ich mich morgen mal durch, wird heute leider nichts mehr, muss mich um die freundin kümmern O:)

Bloodyben
01.10.2008, 20:09
jepp die brauchen auch zuwendung und sind manchmal sogar einfacher zu verstehen (MANCHMAL ;-) )

Bloodyben
02.10.2008, 08:57
$regfile = "M32def.dat" 'Atmega 32
$crystal = 16000000 ' 16 MHz
$baud = 9600 'Baudrate der RS232 Schnittstelle
$hwstack = 150
$swstack = 120
$framesize = 150

'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.7 , Rs = Portc.6
Config Lcd = 24 * 2
Cursor Off

Do
'Ausgabe auf LCD
Cls
Locate 1 , 1
Lcd "**Herzlich Willkommen**"
wait 2
loop
End


musst natürlich die PINS anpassen!

daywalker008
02.10.2008, 11:54
So hier jetzt mein Code:

$regfile = "M32def.dat" 'Atmega 32
$crystal = 6000000 ' 6 MHz
$baud = 9600 'Baudrate der RS232 Schnittstelle
$hwstack = 150
$swstack = 120
$framesize = 150

'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0
Config Lcd = 16 * 2
Cursor Off

Do
'Ausgabe auf LCD
Cls
Lcd "**Herzlich Willkommen**"
wait 2
loop
End

Jetzt hab ich das Problem das immernoch nichts angezeigt wird.
Das Display ist an den oberen Pins des AVR angeschlossen(also wenn ich ihn vor mir liegen hab mit markierung nach oben) also müsste das doch laut Datenblatt Port A sein.
An PA0 ist RS
An PA1 ist RW (wird in der Config garnicht erwähnt?)
An PA2 ist EN
An PA3 ist D4
An PA4 ist D5
An PA5 ist D6
An PA6 ist D7

und ist der Code so richtig? Was ist mit dem RW?

Und noch ne kleine Frage am Rande ich weis nicht so ganz welcher Quarz verbaut ist aber drauf steht YICI6000J7 also wird das doch ein 6 Mhz Quarz sein oder?

Bloodyben
02.10.2008, 12:55
sorry, weiß nicht ob es daran liegt aber vor dem Lcd "..." muss noch locate 1,1 stehen. vielleicht weiß er sonst nicht, wo er es hinschreiben soll auf dem display.

hast du den programmer bei bascom richtig eingestellt?

daywalker008
02.10.2008, 13:29
Also hab jetzt mal ne Led mit dem Code blinken lassen:

$regfile = "m32def.dat"
$crystal = 6000000 ' 6 MHz
$baud = 9600 'Baudrate der RS232 Schnittstelle
$hwstack = 150
$swstack = 120
$framesize = 150

Config Portc.0 = Output 'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)

Do
Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
Waitms 100
Portc.0 = 0 'Pin wird auf Low, also 0V geschaltet
Waitms 100
Loop
End

Und siehe da, die Led blinkt und ich freu mich

nur das LCD will nich :(

Bloodyben
02.10.2008, 13:58
was für ein display ist es denn?
hast du laut datenblatt angeschlossen? lieber nochmal kontrollieren!
hast du den Kontrastregler eingestellt? Kannst du wenn du den ganz in die eine richtung drehst, schwarze kästchen sehen? weil sonst ist noch etwas an deinem display nicht ok!

edit: was du evtl auch noch gucken kannst, ob die zeitabstände bei wait ungefähr passen... also gib mal wait 1 ein und guck ob die led im sekundentakt wechselt. tut sie es langsamer oder schneller, ist vermutlich die frequenz oben im programm falsch eingestellt. dann versuche einfach mal 16mhz... und du müsstest gucken, ob bei den fusebits der externe quarz eingeschaltet ist! (das steht hier: https://www.roboternetz.de/wissen/index.php/Avr#Die_Fusebits)

daywalker008
02.10.2008, 14:13
Also LED blinkt im Sekundentakt wenn ich wait 1 eingebe, Kontrast funzt
Das Display hat ja am Anfang funktioniert, kann nur an der Programmierung liegen
ich hab nochmal in der Hilfe nachgeschaut was hat denn das mit dem LCDBUS auf sich ?
Vielleicht muss ich das benutzen?

daywalker008
02.10.2008, 17:10
So ich habe hier mal das Datenblatt des LCD gefunden:
http://www.pretty-kunze.de/html/lcd.pdf

Aber werd da noch nicht so richtig schlau draus.

raggy
02.10.2008, 17:59
Hallo
Ich habe das selbe Board,das mit dem LCD habe ich auch erst ueberlegt.
Ich habe so gemacht.


Config Porta = Output
Pina.1 = 0
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0
Config Lcd = 20 * 2
'Wait 1
Cls
Cursor Off
Lcd "GPS-TEST"
Wait 20


Also den Pin RW auf Gnd per Software geschaltet.
Dann sollte es funktionieren.Achtung so laeuft das Programm natuerlich ins leere.War nur dazu gedacht, Dir zu zeigen wie es mit dem LCD funktioniert.Das ist eine gute Seite fuer LCD
http://www.sprut.de/electronic/lcd/index.htm
Gruß raggy

daywalker008
02.10.2008, 18:10
Also so?

Config Porta = Output
Pina.1 = 0
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0
Config Lcd = 20 * 2
Wait 1
Do
Cls
Cursor Off
Lcd "GPS-TEST"
Wait 20
Loop
End

Hat aber nicht funktioniert :(

raggy
02.10.2008, 20:48
Hi
So ich bin jetzt hin gegangen und habe die RW Leiterbahn durchtrennt
und den Fuenften Pin am LCD (vom Poti kontrast) mit einem Kabel auf Gnd gelegt jetzt funktioniert es ohne verrenkung.


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 4800
$hwstack = 32 'hardware stack
$swstack = 32 'software stack
$framesize = 44 'frame space

Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0
Waitms 50
Config Lcd = 20 * 2

Waitms 50
Cursor Blink
Waitms 25
Main:

Cls
Lcd "Duisburg";
Wait 10
Cls
Lcd "Rheinhausen"
Wait 10
Goto Main

Ich habe mir die Bilder oben angesehen, das ist ein ATMEGA32 8PU
also nicht fuer 16 Mhz geeignet. Das muß dann ein ATMEGA32 16PU sein!!!
Gruß raggy

daywalker008
03.10.2008, 10:05
So welch Freude ich habs jetzt:

Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.0

Config Lcd = 16 * 2

Config Pina.1 = Output
Porta.1 = 0

Waitms 40
Initlcd


Cls
Cursor Off


Lcd "0123456789012345"
Lowerline
Lcd "ABCDEFGHIJKLMNO7"

Damit funktioniert es denke es liegt an den 40ms

Ich bedanke mich bei allen die ihre Zeit in den Threat gesteckt haben \:D/

daywalker008
05.10.2008, 14:12
Ich hab mal noch eine Frage:
Wieso bringt der mir bei dem Code:



Do
Dim A As Byte , B1 As Byte , C As Integer , S As String * 4

A = 1

Print "print variable a " ; A






Wait 1
Loop
End

Nur kryptische zeichen in meinem Terminal? baudrate und sowas stimmt alles, hat da jemand ne idee?

Dirk
05.10.2008, 15:05
@daywalker008:
Kann alles mögliche sein, wenn du nicht das ganze Prog postest.

Nimm auf jeden Fall die DIMs, mit denen du die Variablen dimensionierst, aus der DO-LOOP-Schleife raus.

Gruß Dirk

raggy
05.10.2008, 16:29
Hallo daywalker008
Hallo hast Du den letzten Eintrag von mir gelesen?
Wenn Du den Atmega wie im Foto drin hast kannst Du hoechstens mit
8Mhz arbeiten, Atmega32 8PU ist auf dem Foto! zum anderen sind die Atmega im neuzustand intern mit 1Mhz getaktet und der Tackt ist nicht so genau wie extern.(Abweichung durch Temperatur etc.)
Das kann schon zu Zeichensalat fuehren. Eventuell muß das Fusebit richteg gestellt werden.
Hast Du mal in RN-Wissen durchgeschaut.
Gruß raggy

daywalker008
05.10.2008, 20:19
Also der Takt beträgt eigentlich 6 Mhz, ist nen externer Quarz dran ich hoffe der ist auch eingeschaltet( Fusebits)

Dirk
05.10.2008, 20:27
... ist nen externer Quarz dran ich hoffe der ist auch eingeschaltet( Fusebits)
Hoffen? Must du schon wissen!
Wie sind denn die Fusebits eingestellt?

Schreib doch ein Testprogramm (so ähnlich wie dein letztes hier gepostetes Programm), das im 1-Sekunden-Rhythmus eine LED blinken läßt. Wenn das nach Augenmaß hinkommt, dann dürfte ja alles stimmen. Dazu must du natürlich im Programm $crystal korrekt (bei 6 MHz: $crystal = 6000000) angeben.

Gruß Dirk

daywalker008
05.10.2008, 21:46
ja das kommt auf jeden fall hin, komme leider erst am freitag wieder an das Board ran ich schau dann nochmal

raggy
06.10.2008, 15:13
Hallo daywalker008
Das Programm ist im Simulator gelaufen.


$regfile = "m32def.dat" 'Atmega32
$crystal = 6000000 'Frequenz 6Mhz
$baud = 9600 'Baudzahl 9600 Rs232
$hwstack = 32 'hardware stack
$swstack = 32 'software stack
$framesize = 32 'frame space
' Am Terminal einstellen Com1 oder Com2 ( 3 oder4) 9600baud 8 Datenbit,Parität keine,Stoppbits =1,Flußsteuerung = keine


' Dim A As Byte , B1 As Byte , C As Integer , S As String * 4


Dim A As Byte
Dim B1 As Byte
Dim C As Integer
Dim S As String * 17

A = 1
C = 1234
S = "Ordnung muß sein!"

Do

Print "print variable A " ; A
Waitms 50 'pausen brauchen nicht sein!
Print S
Waitms 50
Print C
Wait 1
Loop
End

tu Dir einen gefallen und seh dir mal RN-Wissen an.
oder dies Forum, erspart Dir viel frust,mann lernt aus den fehlern anderer
viel,mann muß das Rad nicht immer neu erfinden!
So habe ich vor einem Jahr auch angefangen.
Gruß raggy

daywalker008
10.10.2008, 21:10
Also bei mir funktioniert das programm im Simulator auch einwandfrei aber in der Hardware nicht, kommt nach wie vor wirres Zeug?

Soll das an meinen Rs232 usb Wandler liegen?

Also mit allen anderen Programmen und Hardware funktioniert dieser einwandfrei.

Auch baudrate und so weiter sind richtig eingestellt

raggy
11.10.2008, 04:12
Hallo daywalker008
Da muß Du unter Win. Systemsteuerung und dann Systemeigenschaften
Hardware--Geraete-Manager und dann Com LP aufmachen.
Jetzt steckst Du den USB -RS232 ein dan sollte eine neue Comschnittstelle erscheinen.
Diese mußt Du dann einstellen auf den selben Daten wie beim Atmega
zB "9600 ,8 ,keine ,1, keine"
und RX---TX und TX---RX verbinden.Jetzt sollte es funktionieren!
Gruß raggy

daywalker008
11.10.2008, 18:06
Nee das stimmt schon alles hab ich immer so eingestellt, daran liegts nicht

raggy
11.10.2008, 19:52
Hallo
Dann hast Du SmartUSB von myAVR dran,benutzt Du auch das Terminal
von denen?
Ich habe das zwar auch(smartUSB), aber immer nur zum Programmieren.Les Dir mal die Sachen von myAVR durch ich glaube da muß was verstellt werden.
Entweder durch die Dipschalter(Maeuseklavier) oder das wird durch das Terminal umgestellt.
Denn ich wueste keinen Grund warum das Programm nicht laufen sollte.
Ich setze voraus das Du das richtige Fusebit gesetzt hast.
Gruß raggy

hab mal gerade bei myAVR nachgesehen das wirst Du wahrscheinlich brauchen
Kommandozeilen-Tool für mySmartUSB
darunter ist ein Programm.
raggy