PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein erster Roboter



avus17
13.08.2011, 19:12
Hallo zusammen, ich wollte mal meinen ersten
kleinen Roboter vortellen.
Ziel war es, einen einfachen Roboter zu bauen, der
einfach z.b mit sensoren erweitert werden kann.
Zu den technischen Daten:
Das Chassis besteht aus einer leeeren CD-spindel mit zwei
gehackten Servos und einem frei drebarem Stützrad.
Die Elektronik besteht aus einem ATmega8 in Grundschaltung,
mit einer Festspannungsversorgung von 5Volt und zwei H-Brücken aus jeweils
4 NPN Transistoren (BC337).Wie man auf den bildern sieht, habe ich es so aufgebaut, das
Spannungsversorgung, Microcontroler, und Motortreiber jeweils auf einer eigenen Platine
untergebracht sind.
Momentan sitze ich noch am Bascomprogramm. Könnte jemand da mal drüberschauen ob das so
in Ordnung ist??? Ist nämlich mein erstes Programm in Bascom.

$regfile = "m8def.dat"
$crystal = 1000000

Dim One As Bit
One = 1
Config Pind.0 = Output
Config Pind.0 = Output
Config Pind.2 = Output
Config Pind.5 = Output
Config Pind.7 = Output
Config Pinb.2 = Input
Taster Alias Pinb.2
Portb.2 = 1
Do

While One = 1

Portd.0 = 0
Portd.5 = 0
Portd.2 = 1
Portd.7 = 1


If Taster = 0 Then
Portd.2 = 0
Portd.7 = 0
Portd.0 = 1
Portd.5 = 1
Waitms 60
Portd.0 = 0
Waitms 150



Wend

Loop
End

Anregungen und Kritik sind erwünscht.

Kampi
13.08.2011, 19:35
Ein Robi nach Asuroprinzip ;)
Sieht witzig aus :D aber für den Anfang nicht schlecht.
Was soll den das Programm machen?

avus17
13.08.2011, 19:49
@Kampi: der Roboter soll wenn der Berührungssensor ein Hinderns erkennt,
zurückfahren und wenden:).

Kampi
13.08.2011, 20:24
Das Programm sollte funktionieren. Aber du hast denk ich mal keine "Verriegelung" für die Transistoren gemacht. Das Problem ist wenn aus versehen 2 Transistoren die in Reihe geschaltet sind durchschalten hast du einen Kurzschluss und deine Transistoren gehen flöten. Beim Asuro haben die das Problem gelöst indem sie einen NPN und einen PNP Transistor in Reihe geschaltet haben.

avus17
14.08.2011, 15:33
Könnte mir noch mal jemand beim Code helfen???
Denn immer wenn ich ihn Compilern will, bekomme ich forgende Fehlermeldungen:
Error: 7 Line: 0 IF THEN expected [38] ,in File :
Error: 123 Line: 0 END IF expected , in File :

@Kampi, stimmt, da muss ich wirklich aufpasssen,
ich bin noch garnicht auf die Idee gekommen, das dann die Transistoren
den abgang machen. Warscheinlich baue ich die Schaltung eh noch mal um,
jedoch lagen gerade nur 8 BC337 rum. Irgendwo müsste ich auch noch nen L298 rumliegen haben.

radbruch
14.08.2011, 15:47
Das End If fehlt, ich schätze, es fehlt hier:

$regfile = "m8def.dat"
$crystal = 1000000

Dim One As Bit
One = 1
Config Pind.0 = Output
Config Pind.2 = Output
Config Pind.5 = Output
Config Pind.7 = Output
Config Pinb.2 = Input
Taster Alias Pinb.2
Portb.2 = 1
Do

While One = 1

Portd.0 = 0
Portd.2 = 1
Portd.5 = 0
Portd.7 = 1


If Taster = 0 Then
Portd.0 = 1
Portd.2 = 0
Portd.5 = 1
Portd.7 = 0
Waitms 60
Portd.0 = 0
Waitms 150
End If


Wend

Loop
End

avus17
14.08.2011, 17:35
@radbruch Hey danke für den Tipp, ich habe das Programm
mal Compilert, und ich bekomme keine Fehlermeldung mehr :p.
Ich hab noch mal ne Frage, den irgendwie schreibt Basecom
immer

Pind.0
Portd.0
usw.
immer automatisch groß, ist das normal oder
ist dort ein Fehler im Programm????

frago
14.08.2011, 18:29
Hi, leider kann ich deine Frage nicht beantworten.
Aber ich wollte sagen, dass du ruhig mal die Programmiersprache c++ auprobieren kannst. Ich habe zum beispiel meinen ersten Roboter von Qfix gehabt und man programmiert da auch mit c++, ich als Anfänger kam damals sehr gut damit zurecht und ich muss sagen c++ öffnet dir viel ungeanhnte Möglichkeiten.

Kampi
14.08.2011, 18:52
Nein das ist kein Fehler, das ist normal :)

avus17
14.08.2011, 18:58
@frago Danke für den Tipp, werde ich mir auf jeden fall mal anschauen.
Kannst du eine gute entwicklungsumgebung empfehlen????

@Kampi Danke, hatte mich nur gewundert, da z.b im RN-Wiki alles klein geschrieben ist.

Achja, Namensvorschläge für den Roboter sind wilkommen!!!!

Torrentula
14.08.2011, 19:37
Also als Entwicklungsumgebung für C/C++ würde ich das WinAVR (http://sourceforge.net/projects/winavr/files/WinAVR/20100110/WinAVR-20100110-install.exe/download) paket empfehlen. Dieses enthält den Compiler und auch einen passenden Editor. Es gäbe zwar noch AVRStudio 5 aber das würde ich einem Anfänger nicht dringend empfehlen, zumal man da für C auch WinAVR installieren muss.
Ein gutes Tutorial für C findet sich hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial).

MfG

Torrentula

radbruch
14.08.2011, 19:47
Das verwende ich:

WinAVR: http://sourceforge.net/projects/winavr/files/WinAVR/
KamAVR: http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=632
BurnOMat: http://avr8-burn-o-mat.aaabbb.de/

Bin zufrieden damit :)

frago
14.08.2011, 20:10
@avus 17

Also bei dem Qfix Starter-Paket ist die Software soweit ich weiß dabei, aber man kann das auch auf der Homepage kostenlos downloaden.
http://qfix-shop.de/cgi/websale6.cgi?Ctx={ver%2f6%2fver}{st%2f3eb%2fst}{cm d%2f0%2fcmd}{m%2fwebsale%2fm}{s%2fqfixshop%2fs}{l% 2fDeutsch%2fl}{mi%2f1-2048%2fmi}{pi%2f1-3082%2fpi}{po%2f1%2fpo}{tpl%2fdownloads.html%2ftpl }{fc%2fx%2ffc}{sid%2f6520df9f0f5f89d3d96d6df3569d8 251%2fsid}{md5%2f202a05935e2886455c79aef2c67d3d46% 2fmd5}
so das war der link für das starterpaket



http://qfix-shop.de/cgi/websale6.cgi?Ctx={ver%2f6%2fver}{st%2f3ec%2fst}{cm d%2f0%2fcmd}{m%2fwebsale%2fm}{s%2fqfixshop%2fs}{l% 2fDeutsch%2fl}{sid%2f6520df9f0f5f89d3d96d6df3569d8 251%2fsid}{md5%2fca9bc4bfb4c5d6030a169d37591634a0% 2fmd5}&act=load_tpl&tpl=downloads.html

link für die Downloadseite du musst dir dann miniboard downloaden

so also ich würde den roboter einfach avus nennen.
Sag mal wie alt bist du eigentlich?

MfG Nik

avus17
14.08.2011, 20:47
Danke für die ganzen links und empfehlungen!!!!

@frago ja, ich weiß der name ist unpassend, den ich bin 7 Klässler, jedoch hat
das in einigen Onlinespielen den vorteil, das nicht alle wissen, wie alt man ist.
Und jetzt habe ich mir angewöhnt, mich in allen Foren usw. so zu nennen.
Leider ist gerade durch das abisolierte Ende des anschlussdrahtes vom Fronttaster den ich ausversehn noch nicht angeschlossen hatte ein kurzschluss entstanden, so das der Motortreiber und der Controler gestorben sind :(:( "heul".

frago
14.08.2011, 20:52
;) halb so wild, das wird schon noch.
Und ich hoff mein Roboter den ich im moment plane auch.
MfG Nik

HannoHupmann
15.08.2011, 00:11
avus17 so traurig es ist, aber das ist jedem hier im Forum schon mal in der einen oder anderen Form schon mal passiert. Ich hab auch mal aus unachtsamkeit beim Messen ein Board für 80EUR gegrillt. Ist hart aber gehört wohl als Lehrgeld dazu, wir haben im Forum sogar einen eigenen Thread mit den gesammelten Fehlschlägen.

Kampi
15.08.2011, 11:32
*hust* ich hab mal zwei Steckernetzteile vertauscht und dadurch einen Datenlogger im Wert von paar 100€ getoastet.....
Aber naja......sag mal Avus...nimm doch einfach nen L293 als Motortreiber. Da musst du zwar deine Platine bischen umändern aber das ist ein DIL IC also mit Rastermaß 2,54 und das IC kannst du dann nämlich auch sockeln. Dadurch kannst du den ganz einfach austauschen ohne viel Stress. Bei deiner Transistorenvariante ist nämlich das Problem das du nun alle Transistoren testen musst, auslöten musst und wieder einlöten musst. Und den Controller würde ich auch sockeln falls du es noch nicht getan hast :)
Am besten ist wenn du alles sockelst was du sockeln kannst. Kostet zwar ein paar Cent mehr aber du sparst dir viel Arbeit ;)
Ach und gewöhn dir am besten an alle nicht angeschlossenen Drähte mit Tesafilm zu umwickeln damit sowas nicht nochmal passieren kann :D

avus17
15.08.2011, 17:03
Also ich hab gleich noch mal neue Teile bestellt.
Ich muss mal schaun, was ich nun für einen Motortreiber nehme,
denn ich hab noch nen L293D Bestellt, und nen L293 in der Schublade liegen.
Kann mir jemand sagen, wie viel Ampere diese Servos brauchen??? http://www.conrad.de/ce/de/product/233751/TOP-LINE-STANDARD-SERVO-RS-2-JR/1207063&ref=list

Torrentula
15.08.2011, 17:44
Wie viel die genau ziehen hab ich eig. nie gemessen, im Ampere bereich werden die kaum laufen, möglicherweise wenn du richtig gegenhälst (und dann brechen dir in den billigservos wahrscheinlich die ritzel kaputt). Für meinen Roboter den ich jetzt bauen werde, verwende ich die als Antriebsmotoren. Ich werde die Servos so umbauen, dass die elektronik drinne bleibt, sprich die Endanschläge entfernen und das Poti durch Spannungsteiler ersetzen (siehe Wiki).

Du kannst die Servos natürlich auch komplett ihrer Elektronik berauben, dann brauchst du einen Motortreiber. Der L293D sollte eigentlich reichen, da dein Roboter ja nicht sonderlich schwer wird.

MfG

Torrentula

P.S.: Habe mir am Samstag wie oben beschrieben das Getriebe in einem dieser Servos kaputt gemacht -.-

avus17
15.08.2011, 18:57
@Torrentula danke für die Antwort, dann probiere ich erstmal den L293D aus.

avus17
26.08.2011, 19:22
So, ich melde mich dann mal wieder, denn in der zwischenzeit hat sich mal
wieder etwa getan. Denn ich verwende nun einen Atmega32, die die vom großen C keinen Atmega8
sondern nen Atmega32 verschickt haben. Zudem wird nun als Motortreiber nen L293D verwendet,
und die motoren werden mit über die festspannungsversorgung versorgt. Zudem bekommt der Roboter nen
Kettenantrieb, da mir die CD-spindel zu eng wurde. Bilder folgen morgen.

Torrentula
26.08.2011, 19:39
Schön :) Bin mal auf die Bilder gespannt.

Du musst allerdings darauf achten, dass die Spannungsversorgung nicht zusammenbricht, wenn die Motoren anlaufen, wie es mir zuerst bei meinem Bot (https://www.roboternetz.de/community/threads/54546-Noch-ein-Linienverfolger) ging. Bei mir half nur, 2 Spsnnungsregler einzubauen, 1 für die Sensorik und den Controller und der andere alleine für die Motoren. Auch ist meine Versorgung mit zwei 9V Blöcken suboptimal, du solltest also im gegensatz zu mir gleich auf AA-Akkus setzen, da diese deutlich mehr Kapazität aufweisen.

MfG

Torrentula

avus17
26.08.2011, 19:54
Also die Spannungsversorgung ist bis 2A ausgelegt.
Wahrscheinlich brennt dann der Motortreiber durch und die Spannungsversorgung bleibt heil.
Kennt jemand den spitzenstromm von den Servos???
@Torrentula: welche Servos nutzt du für deinen Robo???

Torrentula
26.08.2011, 20:05
Das Problem bei meinem Bot war, dass die Spannung unter 2,7V gefallen ist und somit die aktivierte Brown-out detection den Controller immer resettet hat.

Den Spitzenstrom kann ich dir leider nicht nennen, verwenden tue ich aber diese Servos. (http://www.conrad.de/ce/de/product/233751/) Wie bereits zuvor gesagt denke ich nicht, dass dir die beiden Servos den L293D abrauchen lassen.

avus17
26.08.2011, 20:12
Ah,danke. die Servos benutze ich auch. Mit der Spannungsversorgung experimentiere ich
noch mal rum.:p

avus17
26.08.2011, 20:42
So, hier sind die Bilder

Torrentula
26.08.2011, 20:45
Sieht sehr interessant aus. Könntest du die Konstruktion genauer erläutern? Welche Ketten und Räder werden verwendet? Woraus besteht das Chassis? Wo wird/werden die Platine(en) befestigt?

MfG

Torrentula

avus17
26.08.2011, 21:10
Also die Ketten und Räder sind aus Lego, und der Rest aus Holzplatten.
als sensoren sind bis jetzt nur zwei Taster vorhanden (allerdings werden noch mehr Sensoren hinzukommen.)
und hinterher hab ich alles mit grauer Farbe bemalt.Die Ketten sollten erst schwarz bleiben, aber
weil so viele Farbspritzer draufgekommen sind, hab ich sie gleich mit angemalt :).

Torrentula
26.08.2011, 21:12
Wie schwer ist der Kerl bis jetzt?

avus17
27.08.2011, 11:36
Bis jetzt wieg er um die 200g.
namensvorshcläge sind immer noch wilkommen!

avus17
28.08.2011, 19:12
Hallo, ich hab heute mal die Elektronik vervollständigt und verkabelt.
(Bild im Anhang) Und nun wollte ich mit der Software anfangen, doch leider ist mein ISP-Kabel kaputt.
Allerdings hatte ich noch so ein Board im Keller: http://www.pollin.de/shop/dt/NTI5OTgxOTk-/Bausaetze_Module/Bausaetze/ATMEL_Evaluations_Board_V2_0_1_Fertigmodul
Nun wollte ich fragen, wie ich den Microcontroler darüber über RS232 in Bascom programiert bekomme.

Wäre über Antworten sehr dankbar.

Kampi
28.08.2011, 19:22
Du kannst die Controller nur per RS232 programmieren wenn ein Bootloader auf dem Chip ist. In der Produktbeschreibung des Polinboards steht davon nichts. Allerdings kannst du natürlich ein anderen Chip mit Bootloader draufstecken und dann kannst du ihn per RS232 programmieren, da das Board ja einen vollständigen RS232 Anschluss besitzt.

avus17
28.08.2011, 19:56
Ach so, danke. Dann muss ich mir wohl noch mal
nen neues ISP-Kabel besorgen. Aber wofür ist eigentlich die RS232 büchse wo ISP dransteht???

Torrentula
28.08.2011, 20:11
Und auch gleich für ne ordentliche Kühlung vom 7805 und dem L293D gesorgt :)

Sieht gut aus. :cool: Jetzt fehlt nur noch ein cooles Chassis.

MfG

Torrentula

Kampi
28.08.2011, 20:18
Die ist ein ganz normaler ISP Anschluss aber nur als 9-pol. Sub-D ausgeführt.

avus17
28.08.2011, 20:37
@Torrentula Ja, die Kühlung ist schon etwas groß geraten:), aber schaden kanne es ja nicht.
@Kampi ach so, hab mich schon gewundert.

avus17
01.09.2011, 21:26
Hallo zusammen, ich hab heut schon mal etwas am Code gebastelt da mein ISP-Kabel morgen kommen
sollte. Und nun wollte ich malragen ob der Code so ok ist oder ob da der Microcontroler in Flammen aufgeht:).

' Pinbelegung:
' Schalter vorne =PC0
' Schalter hinten =PC6
' Enable Motor1 = PA=0
' Motor1 Eingang A = PA1
' Motor1 Eingang B = PA2
' Enable Motor2 = PA4
' Motor2 Eingang A = PA5
' Motor2 Eingang B = PA6

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Pina.0 = Output
Config Pina.1 = Output
Config Pina.2 = Output
Config Pina.4 = Output
Config Pina.5 = Output
Config Pina.6 = Output
Config Pinc.0 = Input
Config Pinc.6 = Input
Pinc.0 = 1
Pinc.6 = 1

Do
If Pinc.0 = 1 Then
Pina.0 = 1
Pina.4 = 1
Pina.1 = 1
Pina.5 = 1
End If

If Pinc.0 = 0 Then
Pina.1 = 0
Pina.2 = 0
Pina.5 = 0
Pina.6 = 0
Waitms 20
Pina.1 = 1
Pina.2 = 0
Pina.5 = 0
Pina.6 = 1
Waitms 100
Waitms 100
Pina.1 = 0
Pina.2 = 0
Pina.5 = 0
Pina.6 = 0
End If

If Pinc.6 = 1 Then
Pina.0 = 1
Pina.4 = 1
Pina.1 = 1
Pina.5 = 1
End If

If Pinc.6 = 0 Then
Pina.1 = 0
Pina.2 = 0
Pina.5 = 0
Pina.6 = 0
Waitms 20
Pina.1 = 1
Pina.2 = 0
Pina.5 = 0
Pina.6 = 1
Waitms 100
Waitms 100
Pina.1 = 0
Pina.2 = 0
Pina.5 = 0
Pina.6 = 0
End If


Loop

End

Der Bot soll einfach nur irgendwo gegenfahren, Bremsen,Wenden und weiter fahren.

radbruch
01.09.2011, 21:55
Hallo

Mit Pinx.y wird der Status eines Pins eingelesen. Wenn du einen Pin als Ausgang verwendest und ihn steuern willst, lautet der Befehl Portx.y=1/0.

Beim zweiten Bremsen nach dem Ausweichen fehlt die kurze 20ms-Pause?

Kommentare kosten im Quellcode nix extra. Aber sonst: Weiter so.

Gruß

mic

Kampi
01.09.2011, 22:12
Der Code sieht soweit ganz gut aus. Wie gesagt Kommentare wären schön :)
Das 2x "Wait 100" würde ich noch zusammenfassen. Und die If-Abfragen ruhig mal beschriften damit man weiß was die machen.

avus17
02.09.2011, 07:43
Also erst mal vielen Dank für die Tipps, ich hab den Code mal überarbeitet.
Ist das so Ok oder hab ich wieder was vergessen???


' Pinbelegung:
' Schalter vorne =PC0
' Schalter hinten =PC6
' Enable Motor1 = PA=0
' Motor1 Eingang A = PA1
' Motor1 Eingang B = PA2
' Enable Motor2 = PA4
' Motor2 Eingang A = PA5
' Motor2 Eingang B = PA6

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Pinc.0 = Input
Config Pinc.6 = Input
Pinc.0 = 1
Pinc.6 = 1

Do
If Pinc.0 = 1 Then 'Wenn keine kolision (vorne) erfolgt
Porta.0 = 1 'fahre vorwärts.
Porta.4 = 1
Porta.1 = 1
Porta.5 = 1
End If

If Pinc.0 = 0 Then 'Wenn kollision (vorne) erfolgt,
Porta.1 = 0 'Bremse,
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
Porta.1 = 1 'Drehe 200ms
Porta.2 = 0
Porta.5 = 0
Porta.6 = 1
Waitms 200
Porta.1 = 0 'Bremse
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20ms
End If

If Pinc.6 = 1 Then ' Wenn keine kolision (hinten)
Porta.0 = 1 'fahre vorwärts
Porta.4 = 1
Porta.1 = 1
Porta.5 = 1
End If

If Pinc.6 = 0 Then 'Wenn kolision (hinten)
Porta.1 = 0 'Bremse,
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
Porta.1 = 1 'drehe 200ms
Porta.2 = 0
Porta.5 = 0
Porta.6 = 1
Waitms 200
Porta.1 = 0 'Bremse
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
End If



Loop

End

Kampi
02.09.2011, 08:19
Jap so ist gut ;)
Die Kommentare dienen legendlich dazu, dass du und andere den Code leichter verstehen. Wenn du jetzt beim programmieren eine Pause machst oder dir den Code 2 Monate später nochmal anschaust hast du tierische Probleme den Code zu verstehen wenn eu ihn nicht ordentlich beschriftest. Bei der Beschriftung ist es weniger wichtig zu schreiben was ein Befehl macht sondern vielmehr was eine komplette Gruppe von Befehlen macht. Hier ein Beispiel:

Du schreibst nicht:
Waitms 200 'Warte 200ms
If PinD.1 = 1 then 'Wenn PinD.1 gleich 1 ist
PinD.2 = 1 'PinD.2 gleich 1
Else 'sonst
PinD.2 = 0 'PinD.2 gleich 0
End If

Weil da siehst du ja schon im Code was die Befehle machen. Du brauchst da nicht nochmal als Kommentar schreiben das "Waitms 200" eine Pause von 200ms bedeutet.
Du schreibst das vielmehr so:

Waitms 200
If PinD.1 = 1 then 'Wenn der linke Taster gedrückt wird,
PinD.2 = 1 'wird sie Lampe eingeschaltet
Else
PinD.2 = 0
End If

So siehst du sofort die Funktion hinter dem Codeblock. Achja und das ist nur ein frei erfundenes Beispiel :D
Das ist nicht aus deinem Code. In deinem Code hast du das Beschriften ja richtig gemacht, ich wollt dir nur nochmal erklären warum man das so macht :D.
Ansonsten gut so und weitermachen ;)

radbruch
02.09.2011, 08:35
Ja, viel besser. Nur noch ne Kleinigkeit: Das Setzen der internen PullUps ist eigentlich auch eine Ausgabe am Pin:

Pinc.0 = 1
Pinc.6 = 1

Deshalb auch hier Portx.y=1

avus17
02.09.2011, 09:59
Ok, danke für den tipp, ich hab den Code noch mal überarbeitet. So müsste es doch jetzt
stimmen oder???
' Schalter hinten =PC6
' Enable Motor1 = PA=0
' Motor1 Eingang A = PA1
' Motor1 Eingang B = PA2
' Enable Motor2 = PA4
' Motor2 Eingang A = PA5
' Motor2 Eingang B = PA6

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Pinc.0 = Input
Config Pinc.6 = Input
Portc.0 = 1
Portc.6 = 1

Do
If Pinc.0 = 1 Then 'Wenn keine kolision (vorne) erfolgt
Porta.0 = 1 'fahre vorwärts.
Porta.4 = 1
Porta.1 = 1
Porta.5 = 1
End If

If Pinc.0 = 0 Then 'Wenn kollision (vorne) erfolgt,
Porta.1 = 0 'Bremse,
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
Porta.1 = 1 'Drehe 200ms
Porta.2 = 0
Porta.5 = 0
Porta.6 = 1
Waitms 200
Porta.1 = 0 'Bremse
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20ms
End If

If Pinc.6 = 1 Then ' Wenn keine kolision (hinten)
Porta.0 = 1 'fahre vorwärts
Porta.4 = 1
Porta.1 = 1
Porta.5 = 1
End If

If Pinc.6 = 0 Then 'Wenn kolision (hinten)
Porta.1 = 0 'Bremse,
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
Porta.1 = 1 'drehe 200ms
Porta.2 = 0
Porta.5 = 0
Porta.6 = 1
Waitms 200
Porta.1 = 0 'Bremse
Porta.2 = 0
Porta.5 = 0
Porta.6 = 0
Waitms 20 'warte 20 ms
End If



Loop

End

radbruch
02.09.2011, 10:55
Hallo

Ja, sieht gut aus. So wie ich gelesen habe verwendest du nun einen L293D als Motortreiber. Ich vermute PA0/4 sind die Enable-Eingänge, PA1/2 und PA5/6 sind Halbbrücken. Wenn du alles richtig angeschlossen hast sollte das so funktionieren.

Solange dein ISP nicht läuft könntest du noch ohne gesteckten Mega32 die Signale mit Drahtbrücken am Kontrollersockel simulieren. Möglicherweise stimmt die Drehrichtung eines Antriebs nicht, wenn die Antriebe um 180° gedreht angebaut sind.

btw. ist der Schaltplan in der Doku deines Pollinboards (http://www.pollin.de/shop/downloads/D810074B.PDF) 'ne Frechheit.

Gruß

mic

avus17
02.09.2011, 12:23
Hallo zusammen, ich hab gerade meinen Programmer bekommen und versucht das Programm zu übertragen,
ich habs so gemacht wie hier: http://www.rn-wissen.de/index.php/Bascom_-_Erstes_Programm_in_den_AVR_Controller_%C3%BCbertr agen

doch ich es wird nach dem click auf das grüne symbol, immer der Bascomordner auf der
festplatte geöffnet. Als programmer benutze ich diesen hier: http://www.conrad.de/ce/de/product/191406/MYSMARTUSB-LIGHT/SHOP_AREA_29142&promotionareaSearchDetail=005

Den treiber hab ich installiert und nach anleitung bei bascom die richtigen Programmereinstellungen eingestellt.
Hat jemand einen idee worann das liegen kann???

avus17
16.09.2011, 19:11
Hallo zusammen, Ich hab heute noch mal ein Geheuse für den
Roboter Gebaut. Zudem hab ich noch zwei Fragen:
Ich möchte nämlich versuchen, Den Roboter Probeweise über
einen ATiny 2313 zu betreiben, da ich den verdacht habe dass der Atmega32 Durchgebrannt ist.
Und nun hab ich keine Ahnung, wie ich den 6-poligen Isp an den ATiny 2313 anschließen soll,
und was ich an folgendem Programm ändern muss, damit es auf den Atiny läuft.


' Pinbelegung:
' Schalter vorne =PD2
' Enable Motor1 = PB=0
' Motor1 Eingang A = PB1
' Motor1 Eingang B = PB2
' Enable Motor2 = PB4
' Motor2 Eingang A = PB5
' Motor2 Eingang B = PB6

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.6 = Output
Config Pind.2 = Input
Portd.2 = 1


Do
If Pinb.0 = 1 Then 'Wenn keine kolision (vorne) erfolgt
Portb.0 = 1 'fahre vorwärts.
Portb.4 = 1
Portb.1 = 1
Portb.5 = 1
End If

If Pinb.0 = 0 Then 'Wenn kollision (vorne) erfolgt,
Portb.1 = 0 'Bremse,
Portb.2 = 0
Portb.5 = 0
Portb.6 = 0
Waitms 20 'warte 20 ms
Portb.1 = 1 'Drehe 200ms
Portb.2 = 0
Portb.5 = 0
Portb.6 = 1
Waitms 200
Portb.1 = 0 'Bremse
Portb.2 = 0
Portb.5 = 0
Portb.6 = 0
Waitms 20 'warte 20ms
End If





Loop

End

EDIT: Code Pinbelegungen verbessert.

avus17
17.09.2011, 17:16
Ich hab gerade mal eine kleine Microcontrollerplatine für den ATiny2313 gebastelt und das
folgendes Program draufgeladen :

' Pinbelegung:
' Schalter vorne =PD2
' Enable Motor1 = PB=0
' Motor1 Eingang A = PB1
' Motor1 Eingang B = PB2
' Enable Motor2 = PB4
' Motor2 Eingang A = PB5
' Motor2 Eingang B = PB6

$regfile = "attiny2313.dat"
$crystal = 1000000


Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.6 = Output
Config Pind.2 = Input
Portd.2 = 1


Do
If Pinb.0 = 1 Then 'Wenn keine kolision (vorne) erfolgt
Portb.0 = 1 'fahre vorwärts.
Portb.4 = 1
Portb.1 = 1
Portb.5 = 1
End If

If Pinb.0 = 0 Then 'Wenn kollision (vorne) erfolgt,
Portb.1 = 0 'Bremse,
Portb.2 = 0
Portb.5 = 0
Portb.6 = 0
Waitms 20 'warte 20 ms
Portb.1 = 1 'Drehe 200ms
Portb.2 = 0
Portb.5 = 0
Portb.6 = 1
Waitms 200
Portb.1 = 0 'Bremse
Portb.2 = 0
Portb.5 = 0
Portb.6 = 0
Waitms 20 'warte 20ms
End If





Loop

End.

Das Flashen funktioniert mit dem Programm "myAVR ProgTool" von der Myavr Seite einwandfrei.
Ist vieleicht ganz interessant für andere mit dem mySmartUSB ligth programmer.
jetzt verkabel ich das ganze mal, und schau ob es läuft.

avus17
04.10.2011, 17:25
Hallo zusammen,
ich hab mal wieder ne Frage nämlich ob jemand einen
Schaltplan hat, wie man mit einem Transistor einen Motor ansteuern kann.
Den mir ist mal wieder der Motortreiber abgeraucht und ich wollte schnell eine
Provisorische Schaltung aufbauen um zu sehen ob der rest der Elektronik was Abbekommen hat.

Torrentula
04.10.2011, 18:39
Warum ist der Treiber dir abgeraucht? Wieder durch eine Unachtsamkeit (kein problem kann jedem passieren :) ) oder weil der Motorstrom zu groß ist? Wenn der Motorstrom zu hoch sein sollte, kannst du den L293B benutzen, der pro Kanal max. 1A liefern kann im gegensatz zum L293D der nur 600ma maximum liefert.


Einfach den MOSFET zwischen Motor und GND einbauen (Also Motor GND an Drain) und dann Gate mit PWM-Signal versorgen. Dies geht natürlich nur in die eine Richtung. Ansonsten müsstest du dich an diesen Schaltplan halten: Click (http://www.rn-wissen.de/index.php/Bild:Hbr%C3%BCckenmosfet_BD547.PNG)
Dieser scheint allerdings nicht eine Dauerlösung zu sein. Wenns nur für Testzwecke ist, dann denke ich passt das mit nur einer Richtung oder?

MfG

Torrentula

avus17
04.10.2011, 19:07
Also das ist schon OK das sich die Motoren nur in eine Richtung drehen.
allerdings hab ich nur BC337 rumliegen. Weiß jemand wie ich den
anschließen muß???

Torrentula
05.10.2011, 15:05
Der muss auch zwischen Motor und GND also Motor muss an Emitter (wenn die flache Seite zu dir zeigt und die beinchen nach unten , rechts) und das PWM-Signal muss an Base. Kollektor logischerweise an GND. Der BC337 hält laut Datenblatt maximal 50V 800mA aus (siehe Absolute Maximum Ratings (http://www.fairchildsemi.com/ds/BC/BC337.pdf)), das sollte eigentlich reichen.

MfG

Torrentula

avus17
05.10.2011, 15:57
Hey danke. Jetzt weiß ich auch, warum das vorher bei mir nie
Funkitoniert hat, ich hatte nämlich ein Datenblatt mit falscher Pinbelegung:mad:.

EDIT: Ich hab mal ein kleines Programm geschrieben um zu sehen ob der
Motortreiber jetzt Funktioniert.
$regfile = "attiny2313.dat"
$crystal = 1000000

Config Portb.5 = Output
Config Portb.7 = Output

Do

Portb.5 = 1
Portb.7 = 1

Loop
Endkönnte mal jemand schauen ob das so inordnung ist???
Den an den Ausgängen liegen nur 0,06V anliegen. Den den Controler kann man noch über den PC
ansprechen.

radbruch
05.10.2011, 16:08
Config Pinb.5 = Output
Config Pinb.7 = Output

avus17
05.10.2011, 16:22
Danke für den Tipp!!! Ich verwechsel immer Port... und Pin...

avus17
05.10.2011, 16:34
Komisch, irgend wie Funzt das Immer noch nicht.
Könnte es daran liegen, das ich Microcontroler und Motoren über zwei verschiedene Spannungsquellen betreibe???

radbruch
05.10.2011, 16:44
Die GNDs (-) von beiden Spannungsversorgungen sind verbunden? (Und der µC hat keine Verbindung zum (+) der Motoren-Spannungsversorgung! Sollst raucht's!)

avus17
05.10.2011, 17:15
Also die Motoren/Motortreiber sind an 6V Angeschlossen, und der Microcontroler an 5V. Verbunden hab ich da nichts.