-         

Ergebnis 1 bis 8 von 8

Thema: serieller Port-Pin?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48

    serieller Port-Pin?

    Anzeige

    Hallo. Kann mir jemand sagen wie ich den PORT RA5 vom PIC18F8520 als seriellen Eingang benutzen kann. Wollte nämlich Daten vom Temperatursensor DS1820 einlesen, der ja auch nur eine Datenleitung besitzt und folglich die Daten seriell sendet. Und das was im Datenblatt steht versteh ich nicht so richtig. Danke.

    MFG Frank85

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Also, RA5 ist mit 2 internen Modulen gemultiplext. Einerseits mit einem analogen Eingang (welchen du natürlich vor dem Benutzen von diesem wegschalten musst, wie das geht, steht im Datenblatt auf der Seite 214, im Kapitel "19.0 10-BIT ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE"). Danach ist noch das Low Voltage Detection Modul da angeschlossen (Seite 235 beschriebt, welches Bit du setzten/löschen musst um den Abzuschalten).

    Das ganze, also welcher Pin welche Aufgaben erfüllen kann, kannst du einerseits, per überischt auf der Seite 2 sehen, oder genauer beschrieben als Zusammenfassung unter dem Kapitel "10. IO-Ports". Für dich ist dann Tabel 10-1 "PortA Functions" ausschlaggebend.

    lg
    Mobius

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48
    Hallo.

    Danke für die Antwort.

    Ich wusste aber schon das ich diese beiden Module ausschalten muss.
    Was ich wissen wollte ist: Wie kann ich mit meinem PIC ein 8 bit langes Wort einlesen, seriell versteht sich? Der Temperatursensor schickt mir die bits doch hintereinander. Da muss es doch irgendein Register im PIC geben, welches die ankommenden bits speichert. Oder hab ich da was falsch verstanden? Oder muss das sogar sofwareseitig geschehen? Wenn ja, kann mir dann mal bitte einer einen Denkanstoß geben, wie das funktionieren soll?

    Mfg

    Frank85

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.07.2005
    Ort
    Hangover
    Alter
    51
    Beiträge
    45
    Lies Dich erst mal etwas ein in die 1-Wire-Protokolle. Der DSxxxx wird nicht nur einfach 8 Bit über die Leitung senden!!!!

    In PicBasic gibt es da einen Befehl, der die Kommunikation erledigt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48
    Hallo, das habe ich mir schon ein paar mal durchgelesen und werde es wahrscheinlich noch ein paar mal mehr . Steht jedenfalls drin das man Verbindung unterbrechen kann wenn man z.B. die nötigen Bits schon empfangen hat. Ist also egal wieviel Bits. Ich weiß von nem Kumpel das es in Basic einfacher geht als in Assembler. Möchte es halt nur mit Assembler probieren.

    Kann es so funktionieren? :

    erstes Bit am Pin in Adresse x verschieben
    zweites Bit am Pin in Adresse y verschieben
    .
    .
    .
    usw.
    und dann alle Bits zusammen auswerten und am Display ausgeben.

    Mfg

    Frank85

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2007
    Beiträge
    16
    wie wärs mit 1. bit am pin zu adresse x addieren,
    falls noch weitere bits, dann adresse x um eins nach links verschieben und 2. bit addieren, usw...

    nach 8 durchläufen nimmt man halt die 2. adresse

    dann brauchst ned soviel speicher? ^^

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Jau, aber dank dem PIC, dass durch den Carry rotiert wird, geht es einfacher. Du schiftest nach links (rlf f,d) (wenn die Übertragung MSB -> LSB ist, ansonsten nach rechts) und dabei wird der Carry-Bit an die erste Stelle (oder letzte Stelle, je nachdem in welche richtung du rotierst) des Bytes geschoben.

    Code:
    #define _SERIAL_IN PORTA,3
    
        bsf STATUS,C
        btfss _SERIAL_IN
        bcf STATUS,C
        rlf empfangsReg,f
    das machst du 8 mal (mittels einer Schleife drumherum) und danach hast du das erste Byte in deinem Register. Danach musst du es nur noch auswerten .

    lg
    Mobius

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48
    Hallo.

    Ich habe dein Tip eingebaut. funktioniert leider trotzdem nicht.
    folgendes problem:

    Im Datenblatt steht das ich den DS1820 auf low ziehen muss, bevor er anfängt eine Null oder eine Eins zu schicken. Muss ich für jedes einzelne Bit den DS1820 kurzzeitig auf low ziehen?
    Es ist nicht so als hätte ich nicht alles ausprobiert. Ich muss nur ganz sicher sein das es so ist.

    Gruß

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •