Forum: Mikrocontroller und Digitale Elektronik Mit einer Spannung ein PWM Signal steuern


von Stefan H. (stefan_h68)


Lesenswert?

Hallo liebe Leute,

ich habe folgendes Problem: Ich möchte ein Programm in C schreiben, dass 
folgendes tut: (Ich habe einen PIC16F688)

An AN0 möchte ich eine Spannung einlesen, die über einen Poti erzeugt 
und anschließend über XBees übertragen wird. Der empfänger XBee gibt mir 
ein PWM aus, das ich mit einem Tiefpassfilter wieder in eine Spannung 
umwandle (Sägezahnspannung, möchte allerdings dann an AN0 den 
effektivwert einlesen).

An RC0 möchte ich ein PWM Signal mit 50Hz ausgeben um damit einen 
Servomotor zu steuern. Ich weiß allerdings überhaupt nicht, wie ich 
anfangen soll :D .
Kleine Programme habe ich in C bereits geschrieben, bin ein Anfänger, 
aber kein Absoluter :).

Wäre nett, wenn Ihr mir einen kleinen Ansatz geben könnt, oder einen 
beispielcode. Vielen Dank im Vorraus.

P.S. Google etc. hab ich schon benutzt ;P

von Juergen G. (jup)


Lesenswert?

Niemand plant zu versagen,
aber viele versagen zu planen.

Und damit hast Du Deinen Anfang.

Du hast uns noch nicht verraten was am Empfänger XBee dranhaengt.

Mach es Schritt fuer Schritt.

1. Spannung vom Poti einlesen
2. XBee comm
3. eingelesene Spannung uebertragen
...

von MaWin (Gast)


Lesenswert?

> Wäre nett, wenn Ihr mir einen kleinen Ansatz geben könnt, oder einen
> beispielcode. Vielen Dank im Vorraus.

              AN0
Poti->Spannung->PIC16F688->XBeeSender----------------------------+
                                                                 |
                                                                 v
                                                               Funk
                                                                 |
                                                                 v
Servo <- PWM <- PIC16F688<-Effektivewertwandler<-Tiefpass<-XBeeEmpfänger
             RC0        AN0                Sägezahn    PWM

??

VoRRaussichtlich geht es noch mehr von hinten durch die Brust ins Auge.

Wo hast du gelernt es lieber kompliziert zu machen statt einfach ?

von Stefan H. (stefan_h68)


Lesenswert?

Hallo, vielen Dank für deine Antwort

Am Empfänger XBee, am PWM-Outputpin habe ich den besagten 
Tiefenpassfilter, und von dem aus, das gefilterte Signal, also die 
Dreiecksspannung an den AN0 gelegt, da ich den Spannungswert derselben 
hier einlesen will.

Am Sender XBee hängt bis jetzt nur ein Poti. Später will ich auch hier 
einen PIC verwenden, der mir analoge spannungswerte sendet.

Schritt für Schritt habe ich es ungefähr so geplant:

1. Spannung des Poti einlesen
2. Eigelesenen Wert über XBee übertragen
3. Vom Reciever Xbee ausgegebenes PWM-Signal in eine Dreieckspannung 
umwandeln (RC - Tiefenpassfilter)
4. Effektivwert der Dreickspannung in AN0 einlesen
5. Jenachdem welcher Wert eingelesen wurde, ein PWM Signal 50Hz an RC0 
ausgeben um einen Servomotor zu steuern.


Der Grundgedanke ist, dass ich am Sender am XBee den Poti drehe und der 
Servomotor am Reciever sich dementsprechend dreht.
Ist dieses Problem gelöst, will ich am Sender Analoge Werte, die der 
Poti gibt, speichern und anschließend per Tasterdruck wieder aufrufen. 
Den Poti also nur zur Einstellung, um Werte im EEPROM zu speichen.

von Stefan H. (stefan_h68)


Lesenswert?

MaWin schrieb:
> Wo hast du gelernt es lieber kompliziert zu machen statt einfach ?

Kannst du mir vielleicht einen Tipp geben, wie es einfacher geht?

Ich habe das noch garnicht gelernt, ich bin im ersten Lehrjahr der 
Elektroausbildung. Die Idee stammt von mir und ist definitiv 
verbesserungswürdig.

von Karl H. (kbuchegg)


Lesenswert?

Lass erst mal alles weg, was du nicht unbedingt sofort benötigst.
benötigst du den XBee gleich?  -  Nein - erst mal weglassen

zäum das Pferd von hinten auf. Bei der Ausgabe, die in deinem Fall ein 
Servo ist. Fang also damit an, das Servo anzusteuern. Erst mal nur mit 
fixen, im Programm hinterlegten Werten, dann kannst du dir ja noch 
andere Dinge zum Testen ausdenken.

Am anderen Ende deiner Kette steht ein Poti zur Eingabe.

Lass erst mal alles weg, was da dazwischen liegt und sieh zu, dass du 
auf EINEM Pic, mit dem Poti (und AD-Wandler) das Servo angesteuert 
bekommst.

Und erst dann überlegst du dir mal, wie du diese ganzen Zwischenschritte 
mit Spannung, die du per Funk überträgst um dann wieder eine Spannung zu 
erzeugen, vereinfachen kannst. Ist doch sinnlos dem XBee eine Spannung 
zu entlocken, nur um die dann wieder in eine Zahl zu verwandeln. So ein 
XBee kann doch auch ganz prima Zahlen übertragen.

Aber das liegt noch in der Ferne.
Arbeite Schritt für Schritt und fang dort an, wo du am schnellsten 
kontrollieren kannst, ob dein Programm funktioniert. Und das ist bei dir 
nun mal am Servo. Entweder das Servo fährt in die von dir programmierte 
Position (POsitionen) oder es tut das nicht. Da gibt es dann keine 
Verwirrungen wo ein eventeueller Fehler liegen könnte. Wenn das Servo 
nicht reagiert, dann liegt das Problem im Servocode und nicht im ADC 
Code, denn den gibt es ja noch gar nicht.

von MaWin (Gast)


Lesenswert?

> Kannst du mir vielleicht einen Tipp geben, wie es einfacher geht?

Direkt den A/D-Wandler wert als 10-bit Binärzähl seriell übertragen.

von Stefan H. (stefan_h68)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Lass erst mal alles weg, was da dazwischen liegt und sieh zu, dass du
> auf EINEM Pic, mit dem Poti (und AD-Wandler) das Servo angesteuert
> bekommst.

Ich habe es bereits geschafft den Servo über zwei Taster Digital zu 
steuern (vor und zurück). Und auch diverse gewollte Positionen konnte 
ich anfahren.

Karl Heinz Buchegger schrieb:
> So ein
> XBee kann doch auch ganz prima Zahlen übertragen.

Meinst du dann, es sei geschickter, bzw. einfacher eine serielle 
kommunikation beider XBees zu versuchen? Das habe ich leider noch nie 
Probiert. Was muss mein SenderPIC dann ausgeben, das der XBee übertragen 
kann?

Ist die Aufgabe letztenendes vielleicht einfacher, wenn ich dieses ganze 
ADC-Zeug weglasse und es mit Tastern regle und alles Digital mache? Wenn 
ja, bräuchte ich auch hier eine kleine Starthilfe, oder einen Tritt in 
den Hintern :D

von Karl H. (kbuchegg)


Lesenswert?

Stefan H. schrieb:
> Karl Heinz Buchegger schrieb:
>> Lass erst mal alles weg, was da dazwischen liegt und sieh zu, dass du
>> auf EINEM Pic, mit dem Poti (und AD-Wandler) das Servo angesteuert
>> bekommst.
>
> Ich habe es bereits geschafft den Servo über zwei Taster Digital zu
> steuern (vor und zurück). Und auch diverse gewollte Positionen konnte
> ich anfahren.


Na super!
Was ist mit dem ADC, denn wenn du mit einem Poti was machen willst, dann 
wirst du den ADC brauchen.

> Karl Heinz Buchegger schrieb:
>> So ein
>> XBee kann doch auch ganz prima Zahlen übertragen.
>
> Meinst du dann, es sei geschickter, bzw. einfacher eine serielle
> kommunikation beider XBees zu versuchen?

Na, das will ich meinen!

> Das habe ich leider noch nie
> Probiert.

Dann wirst du dich damit beschäftigen müssen!

> Was muss mein SenderPIC dann ausgeben, das der XBee übertragen
> kann?

Soviel ich weiß, ist das im Grunde eine ganz normale serielle 
Datenübertragung von einem PIC zum anderen PIC. Nur dass in deinem Fall 
dann eben noch die XBees dazwischen stecken und die serielle Übertragung 
kurzzeitig auf einen Funkkanal geben.

Ist so wie dein PC sich ja auch nicht darum kümmert, das beim Abholen 
von Webseiten aus den USA die Übertragung kurzzeitig über einen Satellit 
läuft (laufen könnte). Das macht 'die Strecke für dich'. Und bei dir 
stecken halt die beiden XBee 'in der Strecke drinnen'. Für den einen PIC 
ist das eine serielle Datenübertragung und für den anderen PIC ist das 
eine serielle Datenübertragung. So wie wenn da ein Kabel dazwischen wäre 
(na ja, nicht ganz). Jetzt steckst du das Kabel zwischen den PIC aus und 
steckst da Sender und Empfänger dazwischen.

> Ist die Aufgabe letztenendes vielleicht einfacher, wenn ich dieses ganze
> ADC-Zeug weglasse und es mit Tastern regle und alles Digital mache?

Digital ja.
Aber ob Taster oder ob ADC ist doch völlig wurscht. Letztendes hat PIC-A 
einen Zahlenwert, der zum PIC-B kommt. Wie der Zahlenwert entsteht und 
wo der herkommt, interessiert ja PIC-B nicht.

von BT (Gast)


Lesenswert?

Hallo,

falls du die XBee module noch nicht hast, tut es am Anfang auch ein 
billiger RX/TX 433 MHz Sender für 5€

Ist dann aber nicht bidirektional. (Also nur one way)


Für Versuche reicht es aber aus. Die müssen nicht parametriert werden.

Um den PIC 16 seriell beizubringen, solltest du mal hier 
http://www.microchip.com/forums/m77985.aspx
nachsehen.

So als kleine Starthilfe neben dem Studium des Datenblattes.

Gruß

BT

von Stefan H. (stefan_h68)


Lesenswert?

BT schrieb:
> falls du die XBee module noch nicht hast, tut es am Anfang auch ein
> billiger RX/TX 433 MHz Sender für 5€

Ich habe die Module leider schon, macht ja aber nichts, kann es ja mit 
denen auch versuchen.

Danke an Karl Heinz Buchegger, deine Erläuterungen helfen mir immer 
sehr.
Ich werde den Versuch jetzt mit Digitalen Signalen probieren und lasse 
den Poti erstmal außen vor. Muss mich jetzt nur noch um die serielle 
Übertragung beider XBees kümmern, dann dürfte (hoffentlich) alles 
klappen.

BT schrieb:
> Um den PIC 16 seriell beizubringen, solltest du mal hier
> http://www.microchip.com/forums/m77985.aspx
> nachsehen.

Diese Seite hilft mir nur bedingt, was genau ist denn UART? Und wie 
funktioniert eine serielle Kommunikation zweier PICs?

Danke bis jetzt :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.