Hallo, lt. beiliegender .png Zeichnung habe ich folgendes Problem: AHSS-Modul (MASTER) soll über Port C7 mit einem Sk/Gbm/Hs-Modul (SLAVE), Port C4, mit einer 1-Wire Leitung (sSkRm) verbunden werden. Am SLAVE sind 6 Eingänge von 6 um-Schaltern (Pegel schalten: GND--> +5V) (Schaltdauer-Länge muss auf ca. 1/2 sec begrenzt sein) und 2 weitere Eingänge RM + Gbm angeschlossen. Diese insgesamt 8 diversen Parameter sollen als 8 bit Daten vom SLAVE zum MASTER übertragen werden. (sSkRm) bit 0 entspricht Anschluß Sk, bit 1 Anschluß Sk-R, usw., lt. Zeichnung. Wie muß ich vorgehen? Braucht der SLAVE eine Adresse? Alle mir vorliegenden Unterlagen über eine 1-Wire Übertragung (Maxim) beziehen sich nur auf Übertragungen MASTER zu MAXIM-Fertigkomponenten. Für exakte zweckdienliche Hilfestellung (evtl. C-Programm) wäre ich sehr dankbar. Es verbleiben für mich darüber hinaus noch weitere Fragen. (5 einzeln zu vergebende Adressen für das MASTER-Modul, Programmierung über einen Taster auf der Platine), usw.. Gruß und Dank Jochen Bemerkungen: Beide oben angesprochenen PIC's sind mit 16 MHz getaktet. Das Programm soll in C geschrieben sein. Die Länge der ser. 1-Wire Leitung liegt zwischen 1,5 - 10m, je nach Zusammenstellung. Als Compiler soll PICC-Lite verwendet werden. MPLAB-ICD 2 von Microsoft ist vorhanden.
>Die Länge der ser. 1-Wire Leitung liegt zwischen 1,5 - 10m,
Nur so nebenbei, Du bist Dir aber schon im klaren, dass Du für eine
1-Wire Verbindung 2 Adern (Daten + GND) benötigst, oder?
Wie groß ist die Datenrate über diese Leitung?
Also ich habe mal über ein Funkmodul (theoretisch ja auch nur ein Kabel) Daten von 2 PICs ausgetauscht. Das überall die gleiche Masse sein sollte, ist ja klar (wenn es nicht darf, musste mit 2 Leitungen hin und über Optokoppler trennen). Ich habe mir 2 Funktionen in C geschrieben, die einmal 8 bit sendet und 8 bit empfängt. Ich habe das etwas anders gelöst, weil ich über Funk keine nervige syncronisation haben wollte: Ich sende Immer 8 Highsignale im Abstand von 30µs. Kommt schon 5 µs hinter dem Highsignal ein zweites Highsignal, ist es eine übertragene 1. Wenn nicht, eine übertragene 0. Das Byte ist zuende, wenn nach 30µs kein erneutes Highsignal kommt. Also eine 1: 5µs high, 5µs low, 5µs high, 15µs low. Und eine 0: 5µs high, 25µs low. siehe Anhang: die großen Zahlen sind die Bits und die kleinen die µs Also bei mir geht es. Ich rufe die Funktion immer 3 mal auf, 1. Adresse und dann 2 Daten-Bytes. Der Empfänger ist immer als Eingang geschaltet, liest das erste Byte mit und wenn es nicht seine Adresse ist, ignoriert er die nächsten beiden Bytes. Vorteil finde ich dabei ist, dass man halt keine Sync software braucht (man kann auch problemlos PICs mit unterschiedlichen Taktungen nehmen, solange überall 1µs-Pause auch 1µs ist), man kann bestimmen ob MSB oder LSB zuerst kommt, man kann auch immer 16 bit übertragen (adresse + byte, um jedem byte einem Empfänger zuzuschreiben), man kann zusätzlich zur vorhandenen Adresse noch eine Globale Adresse machen, dass z.b. alle Empfänger das Byte lesen. Für bidirektional muss man nur aufpassen, dass im Standard-Fall alle angeschlossenen Ports auf Eingang sind und derjenige, der senden will, auf Ausgang Schaltet (um einen kurzen zu vermeiden). Also wenn man das so macht, wie in der Grafik, kann man im Ideal-Fall 2 Bytes in 750µs senden (3*250µs), somit hat man 1333,333 bytes pro sekunde und das sind ca 1,3 KB/s. Heutzutage nichts tolles, aber selbstgemacht, 1-wire und mit 4MHZ-PICs. Man kann hier natürlich auch 32MHz PICs nehmen, und sagen, man teilt die Zeit durch 8, dann hat man 10,4 KB/s. Lange rede, kurzer Sinn. So hab ich es gemacht, es hat funktioniert und wenn du noch interesse hast, sag es hier und ich schreib dir die 2 Funktionen in C. Allerdings bin ich normalerweise ein Fan von 2-wire wie I²C z.B. Also ich kenne die umstände nicht genau, aber ich würde der Einfachheit her immer wenns geht minimal 2-wire nehmen (habe auch schon 4-wire gemacht: Takt, 2 Bits gleichzeitig und Busy-Leitung). MFG RBS_Phoenix
Ohh ich hab ja garnicht zuende gelesen^^ Jochen Sch. schrieb: > Braucht der SLAVE eine Adresse? Ansich in dem Beispiel zwischen C4 und C7 nicht, weil ja nur einer da ist zum empfangen. Nur 2 Fragen stell ich mir noch. 1. Monodirektional ist dann ja so, dass in dem Fall alle 0,5 sec der Slave an den Master sendet und somit der Master nicht senden soll (denn sonst wär es ja wieder bidirektional) und anders rum macht es keinen Sinn, da du die Daten der Eingänge nicht zum Master bekommst. 2. Kann es sein, dass 2 Master an einem Bus sind? Wer ist denn dann der Master der Master? Ich hätte die beiden unteren Master-Slave getauscht. Dann hast du nur einen Master an den einen Bus und der andere ist logischer, da dann der Master monodirektional an den Slave sendet.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.