Hallo gunni7909,
schau mal ins Datenblatt, der Mega32 hat 4 Hardware-PWM-Kanäle.
Brauchst du jetzt noch einen Code-Schnipsel für SW-PWM?
Gruß, Michael
Liebe Mitglieder des Forums,
ich wende mich mit ein paar Fragen an Euch, da ich nicht weiß ob meine Idee mit einem Mega32 so überhaupt durchführbar ist.
Es soll ein mobiler Robot gebaut werden, der mit Ultraschall- und Näherungssensoren ausgestattet ist. Der Antrieb soll über 4 DC-Getriebemotoren geschehen, ähnlich wie bei einem Fußball Robot mit Omniwheels.
Ich möchte bereits vorhandene Bauteile und Motoren verwenden um die Baukosten gering zu halten.
Jetzt zu meinem ersten Problem:
Die Motoren sollen über einen Atmega32 mittels PWM gesteuert werden. Die Sensoren sollen irgendwann einmal über ein zweites Atmega32 Board mittels I2C mit dem ersten Atmega32 Board kommunizieren.
Für meinen jetzigen Bedarf würde es reichen 4 Motoren mit einem Atmega32 per PWM zu steuern und zusätzlich noch einen Ultraschall Sensor abzufragen.
Da der mega32 nicht genug Hardware PWM Ausgänge hat, habe ich daran gedacht, diese Aufgabe über Software PWM zu realisieren. Leider habe ich keinen Ahnung wie ich das Problem angehen soll. Ich wäre dankbar, wenn mir mal jemand auf die Sprünge helfen könnte bzw. einen solchen Code Schnipsel in Bascom zukommen lassen könnte.
Früher habe ich einige kleinere Projekte in Assembler programmiert, glaube aber, daß der Aufwand in Assembler für dieses Projekt zu groß ist. Ich möchte die Programmierung vorerst in Bascom vornehmen, muß also Bascom erst noch lernen.
Vielen Dank für jeden Input
Gunni
Hallo gunni7909,
schau mal ins Datenblatt, der Mega32 hat 4 Hardware-PWM-Kanäle.
Brauchst du jetzt noch einen Code-Schnipsel für SW-PWM?
Gruß, Michael
Hallo,
wenn ich das Datenblatt richtig verstanden habe, hat der mega32 zwar 4 Hardware PWM, dann ist aber kein Timer mehr für andere Aufgaben verfügbar. Einen Timer für die Sensoren hätte ich gerne frei.
Das ist ja der Grund, warum ich auf SW PWM ausweichen wollte.
Also für eine SW Lösung wäre ich schon dankbar.
Viele Grüße
Gunni7909
Hallo gunni7909,
ich würde dazu keinen Timerinterrupt verwenden.Einen Timer für die Sensoren hätte ich gerne frei.
US-Sensoren liest man z.B. mit einem Pin-Change Interrupt aus. (Int0 oder Int1)
das wäre eine Variante:Also für eine SW Lösung wäre ich schon dankbar.
Gruß, MichaelCode:$crystal = 16000000 $regfile = "m8def.dat" Ddrc.0 = 1 Ddrc.1 = 1 Dim Bla As Byte Dim Pwma As Byte Dim Pwmb As Byte Pwmb = 10 Pwma = 127 Do Bla = Bla + 1 If Bla > Pwma Then Portc.0 = 1 Else Portc.0 = 0 End If If Bla > Pwmb Then Portc.1 = 1 Else Portc.1 = 0 End If Loop End
Hallo Michael,
vorerst danke für Deine Antwort.
Ich werde die SW Lösung mal ausprobieren. Zur Abfrage der US Sensoren:
Ich stelle mir vor, daß ich aus der Sensorabfrage einen analogen oder digitalen Wert erhalte, der der Entfernung proportional ist. Wie soll ich da den Pin Change Int nutzen ? Ich muß doch den US in gewissen Zeitabständen abfragen und dann das Ergebnis an den Prozessor weiter leiten bzw verarbeiten.
Viele Grüße
gunni7909
Hallo gunni7909,
Es gibt verschiedene US-Sensoren. Neuere haben z.B. einen I2C-Bus, ältere geben vielleicht nur einen Puls aus. Der SRF04 ist so einer:
http://www.roboter-teile.de/datasheets/srf04.pdf
Du mißt dann z.B. nur die Pulslänge zwischen der Low-High-Flanke und der High-Low Flanke und hast die Entfernung.
Gruß, Michael
Lesezeichen