Hallo,
ich möchte hier mal kurz unseren Entwurf für eine eigene Kommunikation zwischen dem IOW und einem PIC vorstellen.
Ziel: der PIC soll über den IOW den PC steuern
RS232 und IIC wollen wir zunächst nicht wverwenden, weil man dazu entweder kein IOW bräuchte oder der IOW nicht den gewünschten slave-Modus kann.
Auf der IOW-Seite wurden die letzten 8 IO-Pins, auf der PIC-Seite der komplette Port C als Kommunikationsleitungen festgelegt.
Bei der Verdrahtung sind wir uns noch unsicher ob wir Sie direkt verbinden oder noch Widerstände einfügen müssen (Was könnte passiert wenn zwei aufeinandergeschaltete PINs von IOW und PIC High oder Low oder unterschiedlich sind? Tipps sind Willkommen).
Abgefragt werden die Leitungen mit einem Interrupt auf der PIC-Seite, und mit einem Nebenläufigen Polling auf der PC-Seite.
Da alle Leitungen für PIC und IOW sowohl Sende- als auch Empfangsleitungen sind kam es bei ersten versuchen mit 200ms und 50 ms Sendeimpulsen manchmal zu Überlagerungen.
Hat der PIC eine 16 (also 5. Leitung) aktiv gesetzt und der IOW gleichzeitig eine 128 (also 8. Leitung) kam der "Datensalat" von 144 dabei raus.
Wir müssen nun noch eine Steuerleitung spendieren die anzeigt ob der Kommunikationsweg frei oder belegt ist.
Bei belegt soll eine Zufällige Zeit gewartet werden und dann erneut Versucht, bis es geklappt hat.
Was haltet Ihr davon?
Gruß Stefan
Eigene Kommunikation IO-Warrior <-> PIC Mikrokontrolle
Moderator: Guido Körber
-
- Posts: 33
- Joined: Wed Mar 15, 2006 2:37 pm
- Location: Pforzheim
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
-
- Posts: 33
- Joined: Wed Mar 15, 2006 2:37 pm
- Location: Pforzheim
Die PC Seite pollt den IOW.Guido Körber wrote:Ohne Handshake keine gute Idee. Wie findet die Gegenstelle raus, das neue Daten anliegen?
Beim PIC wird bei Änderung an EINEM bestimmten PIN ein Interruppt ausgelößt. In der ISR werden dann die Kommunikationsleitungen gelesen und ausgewertet.
Wir haben den PIN momentan mit der 8. Leitung verbunden, d.h. wenn der IOW eine 128 sendet.
Das funktioniert dann so:
1. IOW legt für X ms das Datum an (z.B. eine 4 => Leitung 3 aktiv)
2. IOW legt für X ms das (Datum+128) an (z.B. eine 4+128 => Leitung 3 und 8 aktiv)
3. IOW legt für X ms das Datum an (z.B. eine 4 => Leitung 3 aktiv)
Schema (low aktiv):
Phase:..............1. 2. 3.
Leitung 3: -----|..........|-----
Leitung 8: --------|...|--------- (ist auch mit external Interruppt verbunden)
Zum Beginn der Phase 2 springt der PIC in die ISR und hat dann 2 mal X ms Zeit alle Leitungen zu lesen