PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega32/Servoprogramm



easyprivate
14.11.2008, 20:19
Moin.... Komme einfach nicht weiter hier... Habe euch mal ein Desktopfoto gemacht,hoffe ihr wisst so was ich meine...

http://img236.imageshack.us/img236/2682/bascomproblem1qq3.jpg (http://imageshack.us)

Folgendes Problem....:

1.Ich weiß nicht ob das Programm so funktionieren kann....

2.Kriege die Daten nicht auf den Chip übertragen und weiß nicht warum...
Das Programm "findet die Datei nicht".... Habe meiner Meinung nach den richtigen Chip (ATmega32) ausgewählt und die Quarzzahl (16000)richtig "benannt"... COM-Schnittstelle stimmt auch sowie die Bautrate...

Man,man,man.... Kann vielleicht jemand helfen? :-({|=

radbruch
14.11.2008, 20:25
Könnte es daran liegen das 16MHz eine Zahl mit 6 Nullen ist?

$crystal = 16000000

Außerdem ist es besser den Quellcode eines Programmes und die Fehlermeldungen beim Kompilieren in Code-Tags zu posten...

easyprivate
14.11.2008, 21:08
Da ich Neuling bin habe ich einfach die Zahl auf dem bauteil genommen... Und da steht nur 16000 ohne irgend eine HertzEinheit.... Aber auch daran liegt es nicht.... *grübel*

hexabotix
14.11.2008, 21:14
Respekt für die harte handbuchlose Tour!

Dein Programm möchte wohl in etwa so aussehen:




$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32

Config Servos = 1 , Servo1 = PORTA.7 , Reload = 10

Config PORTA = Output

Enable Interrupts

Do

Servo(1) = 100
Wait 1
Servo(1) = 150
Wait 1
Servo(1) = 200
Wait 1

Loop

End



Ohne Gewähr!

Gento
14.11.2008, 21:18
Nur vor dem Servo(1)=100 kommt ein DO

Und unten kommt kein do loop sondern nur ein Loop.

Gento

radbruch
14.11.2008, 21:25
Tja, das wäre auch zu einfach gewesen :(

Da ich nicht so wirklich der Bascom-Profi bin kann ich auch nur etwas mehr als raten:

- Waitms 1000 'ohne =
- Das erste do ist zuviel

Werden nach diesen Änderungen noch Fehler beim Kompilieren gemeldet?

Gruß

mic

easyprivate
14.11.2008, 23:31
Ahhhhh,wir kommen der Sache näher ;-)

Also mit dem Code hier lässt sich das Programm kompilieren und simulieren....


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32

Config Servos = 1 , Servo1 = PORTA.7 , Reload = 10

Config PORTA = Output

Enable Interrupts

Do

Servo(1) = 100

Waitms 1000

Servo(1) = 150

Waitms 1000

Servo(1) = 200

Waitms 1000

Loop

End

Wenn ich jetzt auf Program-->Send to Chip klicke kommt folgende Fehlermeldung....:

Could not Identify Chip with ID:FFFFFFF

Meine aber das trotzdem etwas gesendet wurde weil im "Sample electronics AVR programmer"Fenster steht...: Programmed:2
??????????

Wie kann ich denn sehen ob ein Programm/welches Programm sich auf dem Chip befindet?

Gento
15.11.2008, 00:43
Der Begriff "Could not Identify Chip " bringt unter Suchen alleine hier im Forum , über 100 Themen des Problems zutage.

Sollen wird das zum hundertfünfzehntenmal erklären , oder magst du lieber selber vorerst suchen & nachlesen ?

lg
Gento

easyprivate
15.11.2008, 13:32
Da gebe ich völlig recht.... Hab jetzt 3Stunden gewurschtelt aber komme nicht weiter...

- Habe alle Baudraten probiert (jedesmal geändert im progcode,imBascomAVR und in der Schnittstelle am PC selber)

- Dann habe ich noch gelesen das man einen Bootloader braucht... Habe das RN-Control,da ist das doch vorprogrammiert oder nicht?

- Liegts vielleicht an der Hardware? Habe das Board über das mitgelieferte RS232 Kabel am PC angeschlossen (COM1)

easyprivate
15.11.2008, 13:57
Glaube ich habe den Fehler selbst gefunden.... zeimlich blöder Fehler.... Habe das RS232Kabel direkt an den PC angeschlossen (COM1-Schnittstelle),mir fehlt aber der passende Dongle.............!!!!!!!!!!!!!!!!!!!!!!!!!!

Könnte es daran liegen? :-k

Gento
15.11.2008, 22:42
Die Meldung :Wenn ich jetzt auf Program-->Send to Chip klicke kommt folgende Fehlermeldung....:

Could not Identify Chip with ID:FFFFFFF

Deutet darauf hin das Du nicht den Bootlader benutzt.
Dem Bootloader ist egal welcher Chip was bekommt, oder am Kabel hängt.

Nebenbei ist ein Dongel ein Softwarecopierschutz und nicht nur ein Stecker.

Bascom>Options>Programmer>was ist dort als Programmer angegeben ?

lg Gento

easyprivate
16.11.2008, 01:03
Das ganze sieht so aus....

http://img374.imageshack.us/img374/4670/unbenanntgj8.jpg (http://imageshack.us)
http://img374.imageshack.us/img374/unbenanntgj8.jpg/1/w508.png (http://g.imageshack.us/img374/unbenanntgj8.jpg/1/)




Achso,ich dachte man braucht den Dongle für die Kommunikation ansich....[/img]

Gento
16.11.2008, 10:58
LPT 378 = Druckerparrallelport mit 25 Pin.

Du brauchst eine isp Programmer wie z.b. hier:http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&rd=1&item=140273652449&ssPageName=STRK:MEWA:IT&ih=004

Falls Dein Rechner noch einen solchen Anschluss hat.

Gento

easyprivate
27.11.2008, 00:05
So liebe Forengemeinde...

Habe mir den Dongle besorgt! Habe jetzt auch mehrmals alles so gemacht wie es in der Anleitung "Bascom-Erstes Programm in den AVR übertragen" steht. Immer noch ohne Erfolg....
Wenn ich den Programmer öffne (nach dem kompilieren) und auf das grüne "Chipsymbol" klicke passiert garnichts.......!!! Keine Fehlermeldung,kein "OK",kein nichts... Störquellen durch Stromversorgungskabel etc sind ausgeschlossen....

Hat noch jemand eine Idee? ](*,)

Gento
27.11.2008, 06:59
Schon mal STK200/STK300 als Programmer eingestellt ?

Gento

stefan_Z
27.11.2008, 13:58
- Die MHz sind erstmal egal.. das Programm läuft halt dann nicht so wie gedacht (zumindest die WAIT-Teile), aber es geht.
- Waitms 1000 geht glaubich nicht, da muss man Wait 1 nehmen
- DO LOOP muss UM die Schleife, nicht dahinter!

easyprivate
27.11.2008, 16:49
klar, stk200/stk300 ist eingestellt,alles andere was man einstellen soll auch....

aber das programm läuft doch auch im simulator,hat es denn was damit zu tun das er das programm nicht überträgt???????

Jaecko
27.11.2008, 16:54
Ein Fehler, der bei mir am Anfang oft Stress gemacht hat:
Im BIOS des PC lässt sich für den Druckerport ein Modus einstellen; bei mir war der Anfangs auf ECP; nach dem Umstellen auf Standard gings dann. Evtl liegts daran.

(Programmer und AVR sind schon mit Strom versorgt?)

easyprivate
30.11.2008, 22:45
Bin euch allen sehr für eure Hilfe dankbar,nur leider war bisher alles ohne Erfolg.......

Würde mir evtl ein ISP-USB Dongle helfen?

easyprivate
07.12.2008, 00:05
...bzw fällt dann auch automatisch die Fehlerquelle "could not identify....." weg?

Dirk
07.12.2008, 11:01
Es würde etwas helfen, wenn du noch 'mal postest:
- Welches Board hast du genau?
- Welchen Programmer/Dongle hast du gekauft?
- Was steht im Hardware-Manager bei der parallelen Schnittstelle (wenn du die denn benutzt, speziell bei der Hardware-Adresse)?

Gruß Dirk

easyprivate
07.12.2008, 16:12
Hallo Dirk!

Also benutze das RN-Control mit nem Atmega32... Habe diesen Dongle hier gekauft:http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&rd=1&item=140273652449&ssPageName=STRK:MEWA:IT&ih=004

Zudem benutze ich den Druckerport LPT1 Ort: PCI-BUS einstellungen sehen so aus... http://img241.imageshack.us/my.php?image=unbenanntwb4.jpg

Gento
07.12.2008, 17:44
1) Im Bios vom Rechner die Druckerportdresse ermitteln und merken. z.B 3BC

2) Auf Output Only setzen.Das reicht

3)Systemsteuerung>System>Hardware>Geräte-Manager>LPT1>Eigenschaften>Ressoursen überprüfen ob 3BC drin steht.

4)Die Einstellungen im Bascom siehe Bild.


http://www.Gento.de/Programmer.gif

5) Eingestellt sein muß die Portadresse aus dem Bios.

6)Ich habe auch gleichen Programmer aus Ebay und der sollte gehen.

Gento

Dirk
07.12.2008, 20:47
Gento hat schon das Wesentliche geschrieben.
Wenn das auch nicht klappt, würde ich noch das Flachkabel vom Programmer zum ISP-Stecker prüfen. Belegung standard? Stecker richtigrum aufgequetscht?

Gruß Dirk

easyprivate
08.12.2008, 16:17
soooo... habe es ausprobiert,seperat auch nochmal mit "378" als einstellung und "3BC", auch ein anderes Flachbandkabel habe ich genommen,habe auch mal eins probiert und es falsch herum aufgequetscht.... Alles ohne Erfolg....

USB-Dongle zu Weihnachten schenken lassen?

Dirk
08.12.2008, 18:27
Hallo easyprivate,

... habe es ausprobiert,seperat auch nochmal mit "378" als einstellung und "3BC"
Es macht keinen Sinn, verschiedene Adressen (378, 3BC) nur auszuprobieren. Meine ist z.B. ganz anders: 0A48.

Du must also im Gerätemanager auf "Anschlüsse (COM und LPT)" klicken, dann auf den Eintrag darunter, der "(LPT1)" enthält mit der rechten Maustaste klicken. Im Kontextmenü "Eigenschaften" wählen. Dann erscheint ein Fenster "Eigenschaften von ... (LPT1)".
Da wählst du dann den Reiter "Ressourcen".
Da steht dann die Hardware-Adresse, bei mir steht da: E/A-Bereich 0A48..0A4F.
Den 1. Wert (hier 0A48) übernimmst du in die BASCOM-AVR Options (Reiter "Programmmer") unter "LPT-adress".

Gruß Dirk

easyprivate
08.12.2008, 20:26
das meine ich ja ;-) habe als erstes im bios nachgesehen was da eingestellt war (es war 378)dann habe ich im gerätemanager nachgesehen (dort war es auch 378) dann habe ich 378 in bascom eingestellt,hat nicht geklappt (mehrmals versucht zu übertragen)....
dann habe ich im Bios+Gerätemanager+bascom das ganze auf 3BC gestellt... das meinte ich damit... naja jedenfalls hat alles nicht geklappt... somit habe ich alles ausprobiert was man ausprobieren kann.... ](*,)

Gento
08.12.2008, 21:01
Ist ein 0815 Drucker an dem Port unter Windows eingestellt ?

Da war doch mal das es sein muss.

Gento

Panzer4000
09.12.2008, 14:21
Hallo

bevor du weitere Handstände machst und dir noch alle Dongle kaufst stelle doch mal fest, ob dein Atmega 32 dich überhaupt will!
Es sieht so aus, dass der sich nicht flash lässt.
Hast du schon mal ein anderes Programm geflasht ?
Wenn dein Atmega 32 nicht kann, Fuse verstellt dann ist eben sense.

Les doch mal die Fuse aus.
Programmieren,zum Chip senden oder F4

da wirst du erkennen ob dein µC da ist oder ob der überhaupt ansprechbar ist.

mfg

easyprivate
09.12.2008, 14:36
habe den chip von robotikhardware,da ist der schon vorprogrammiert...ist ja auch ein programm drauf (von denen her)...
und woran erkenne ich dann das fuse richtig sind?

easyprivate
13.12.2008, 12:56
ES HAT GEKLAPPT!!!!!!

An dieser Stelle danke ich meinen Eltern,meiner Familie und den fleißigen Helfern des Forums... Ohne euch wäre all das nicht möglich gewesen... Danke! \:D/

Warum es funktioniert...:

-USB/ISP Programmer gekauft
-Treiber installiert
-in Bascom den Programmer eingestellt (USBISPProgrammer)
-klappt

Gruß,Easy

easyprivate
17.12.2008, 13:13
Da das brennen nun funktioniert hänge ich am nächsten Problem,aber da könnt ihr mir sicherlich weiterhelfen ;-)


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 32
$swstack = 32

(Problem Anfang)

Config Servos = 18 , Servo1 = PORTA.0 , Servo2 = PORTA.1 , Servo 3 usw usw usw , Reload =10

Config PORTA = Output
Config PORTB = Output
Config PORTC = Output (Problem Ende)

Enable Interrupts

Do

Servo(1) = 100

waitms 1

Servo(1) = 150

waitms 1

Servo(1) = 200

waitms 1

Print "***** UN NOCH ENS *****"

Loop

End



Also mein Problem liegt darin das ich 18 Servos ansteuern möchte... Bin mir aber nicht sicher wie ich das realisiere....
Habe es oben im Code mal probiert,lässt sich so aber nicht kompilieren...

Weiß jemand wies richtig aussehen soll? (roter Bereich)

easyprivate
23.12.2008, 01:41
Niemand ne Idee?

holzi
23.12.2008, 05:52
Guten morgen easyprivate,
Du setzt Deinen Servo 1 auf Porta.0, den zweiten auf Porta.1
Soweit so gut (Deine usw weg damit).
Dann aber kommt
Config Porta = Outpu
Config Portb = Output
Config Portc = Output
Das verstehe ich nicht.
Fang doch erst einmal mit nur einem Servo an und steigere Dich dann.

Config Servos = 1 , Servo1 = Porta.0 , Reload = 10
Config Pina.0 = Output

Schliesse diesen ersten Servo an Porta.0 an und Du wirst sehen, dass dann OK ist.
Dann kommt der zweite Servo z.B. an Porta,1

Config Servos = 2 , Servo1 = Porta.0 , Servo2 = Porta.1 , Reload = 10
Config Pina.0 = Output
Config Pina.1 = Output

Auf diese Art steigerst Du Dich und lernst gleichzeitig die Absteuerung der Servos und verstehst dazu noch alles.

Peter

easyprivate
23.12.2008, 15:08
Dein Tipp ist sicher nett gemeint allerdings bin ich soweit schon... Hänge quasi an der Stelle wo ich den neunten Servo ansteuern will...

Dirk
23.12.2008, 17:32
Also mein Problem liegt darin das ich 18 Servos ansteuern möchte...
Mit Bascoms eingebautem Servo-Befehl gehen nur 14 Servos.

Gruß Dirk

easyprivate
24.12.2008, 05:04
Eingebautem Servobefehl? Wusste ich garnicht... Gibt es darüber etwas zu lesen?

Dirk
24.12.2008, 07:25
Eingebautem Servobefehl? Wusste ich garnicht... Gibt es darüber etwas zu lesen?
Witzig! :-s

Nachzulesen in der Bascom-Hilfe unter CONFIG SERVOS.

Gruß Dirk [-(

easyprivate
25.12.2008, 00:04
Ach das meinst du,das ganze verwende ich ja.... Mein Problem leigt an der Stelle wo man den ersten Port "abgearbeitet" hat (PortA.0 - PortA.7)...
Man schreibt ja Config PortA = Output... Schön und gut,wenn ich jetzt aber für weitere Servos zb den PortB noch dazu nehmen möchte muss ich

Config PortA = Output
Config PortB = Output schrieben oder nicht? Jedenfalls kommt da der Fehler...

Hoffe ich habe mich einigermaßen verständlich ausgedrückt,weiss nämlich nciht wie ichs besser erklären soll ;-)

Dirk
25.12.2008, 11:44
Hallo easyprivate,

was kommt den da für ein Fehler?

Du könntest probieren, vom PortB nur die Pins als Ausgang zu definieren, die du wirkllich für die Servos brauchst, und nicht den ganzen Port. Form Z.B.:
Config Pinb.0 = Output

Du solltest dir auch noch 'mal die Doku zum RN-Control ansehen: Nicht alle Pins von allen Ports sind ganz frei verwendbar, sondern teilweise schon für bestimmte Funktionen (I2C-Bus, IRQ-Leitung usw.) vorgesehen. Wenn du z.B. Pinb.0 für ein Servo verwenden willst, müßtest du evtl. das Motortreiber-IC entfernen ...

Gruß Dirk

easyprivate
25.12.2008, 21:59
ok werde ich versuchen... ja das ist mir auch aufgefallen und hat mich ans grübeln gebracht ;-) danke für deine hilfe

easyprivate
26.12.2008, 02:32
Hallo Dirk,
hast mich echt ans grübeln gebracht.... Mache mir gerade eine Liste für welchen Servo ich welchen Port nehme... Wenn man den MotorIC zieht und den ganzen PortA dazu nimmt (komplett frei verfügbar) dann komme ich auf eine verfügbare Anzahl von 14 Pins.... Die Pins für die I2C,RS232 und ISP rühre ich ja nicht an. Die sind ja auch ganz toll beschrieben wofür sie sind... Was ist denn aber mit den Pins:

PORTB.3 - OC0
PORTB.4 - SS
PORTC.2 - TCK
PORTC.3 - TMS
PORTC.4 - TDO
PORTC.5 - TDI

Darf ich die zur Servoansteuerung verwenden oder nicht???

Hoffe du weißt Rat ;-)

Frohes Fest euch allen!!!!!