-         

Ergebnis 1 bis 5 von 5

Thema: Serielle Schnittstelle

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2006
    Beiträge
    6

    Serielle Schnittstelle

    Anzeige

    HILFE!!

    Ich habe ein Problem, ich habe einen pH-Meter, der an meiner Schnittstelle des Mikrocontrollers (80C535) angeschlossen ist.
    Nun meine Frage:
    ich weiß das man beim Programmieren, die Ports 3^0,3^1 zu verfügung hat. Mein ph-Meter misst sowohl die Temperatur als auch den pH-Wert, heißt dass jetzt auch, dass auf z.B. 3^0 das Signal für den pH-Wert und auf 3^1 das Signal für die Temperatur kommt??

    Ich hoffe mir kann jemand helfen.

    Holger

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    erklär erstmal dein problem genauer, was iss das fürn ph-messer, was iss das fürn contrller, und sone sachen

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Jede RS232 benutzt 3 Leitungen:

    Gnd
    RxD ==> Daten empfangen
    TxD ==> Daten senden

    Ist hier sicher auch so.
    Je nachdem gibt es verschiedene Möglichkeiten:
    1. Instrument sendet abwechselnd pH-Wert und Temperatur
    2. Du musst zuerst einen Befehl an das Instrument senden, damit es "weiss" welchen Wert Du auslesen willst. Als Reaktion auf deinen Befehl sendet es nun den entsprechenden Parameter.

    Was ist das für ein Gerät ? Type ? Hersteller ?
    Poste mal ein paar Einzelheiten, sonnst kannst Du nicht erwarten das wir Dir helfen können. Wenn wir Hellseher wären würden wir jetzt in der Sonne liegen ...
    MfG
    Ruedi

  4. #4
    ich hab vor ein paar monaten ein thermometer Programmiert welches die Temperatur mittels eines NTC Widerstandes misst und die Daten im Terminal asgiebt. allerdings habe ich einen etwas neueren Prozessor 80C537. ich geb dir gleich mal noch meinen Quel code. viel spass hoffentlich hilft es dir was. am besten Kopierst du den Code mal in den Editor um ihn besser anschauen zu können. wenn du kein Assembler programm hast schachu mal auf www.vistasoft.ch vorbei dort gibts das gratis:


    HEAD
    ;************************************************* *******
    ; NAME = Temperatursensor
    ; PROZ = 4 80C537 CPU5 12 MHz
    ; AUTOR = Steiner Nando
    ; DATUM = 28.11.2005
    ; UPDATE = 28.11.2005
    ; VERSION = 1.0
    ; LANGUAGE = Explain 1.8.4.0
    ;************************************************* *******
    ; FUNKTION:
    ; eine Schaltung mit einem NTC-Widerstand stellt den
    ; Temperatursensor dar, die Signal werden durch einen
    ; AD-Wandler gewandlet.
    ;************************************************* *******
    HEAD\

    Wert EQU R0 ;R0 als Kanal definieren
    Enter EQU 0Dh


    Start: mov Wert,#00h ;bei Wert auf 0 starten

    abstand: mov A,#Enter ;auf neue Zeile schreiben
    lcall Com1WriteByte ;rufe ausgabe Unterprogramm auf

    main: mov A,Wert ;Wert des Spannungsteilers in A laden
    lcall AD_Wandler ;AD Wandler Unterprogramm aufrufen
    push A ;A retten
    call Umwandler ;rufe Dez to Hex Wandler Unterprogramm auf
    call Com1WriteByte ;rufe ausgabe Unterprogramm auf
    pop A ;A zurückgeben
    swap A
    call Umwandler ;rufe Dez to Hex Wandler Unterprogramm auf
    call Com1WriteByte ;rufe ausgabe Unterprogramm auf

    lcall wait ;rufe ersetzten Unterprogramm auf
    ljmp abstand ;Sprung zum anfang



    ;************************************************* ******
    ;*Warten
    ;************************************************* ******
    ;* Funktion :kleine Zeit verzögerung
    ;************************************************* ******

    wait: push R5
    push R6
    push R7
    mov R5,#01h
    wait_1: mov R6,#0FFh
    wait_2: mov R7,#0FFh
    djnz R7,$
    djnz R6,wait_2
    djnz R5,wait_1
    pop R7
    pop R6
    pop R5
    ret



    ;************************************************* ******
    ;*Dezimal zu Hax Wandler
    ;************************************************* ******
    ;* Funktion :Wandeld die Dezimalwert in Hex um
    ;* INPUT :In A ist der Aktuelle Wert Dezimal
    ;* OUTPUT er Wert in A ist nun in Hex
    ;************************************************* ******

    Umwandler: mov B,#10h ;Teiler mit 16 laden
    div AB ;A durch B, ergebniss überschreibt A
    anl A,#00001111b ;Das Obere Nibble ausmaskieren
    mov DPTR,#HexCode ;DataPointer auf den Code String setzen
    movc A,@A+DPTR ;DataPointer um Wert von A erhöhen

    ret ;zurück

    HexCode: DB '0123456789ABCDEF',0 ;Code String



    ;************************************************* ******
    ;*AD Wandler
    ;************************************************* ******
    ;* Funktion er Wert des gewählten Kanales des AD
    ;* Wandlers wird in A geschrieben, und dann
    ;* zurück geschickt
    ;* INPUT efinierter Kanal
    ;* OUTPUT :Wert des Kanals
    ;************************************************* ******

    AD_Wandler: setb CLK ;CLX auf 1 setzen
    clr ADEX ;ADEX auf 0 setzten
    setb BSY ;BSY auf 1 setzten
    setb ADM ;ADM auf 1 setzten
    anl ADCON,#11111000b ;ADCON maskieren
    orl ADCON,A ;ADCON mit A maskieren
    mov DAPR,#0D2h ;Referenz zwischen 0.62V und 4.06V setzen
    jb BSY,$ ;warten bis BSY 0 ist
    mov A,ADDAT ;Werte in A schreiben

    ret ;zurück



    ;************************************************* ******
    ;* Com1WriteByte
    ;************************************************* ******
    ;* Funktion : Gibt ein einzelnes Byte ueber die
    ;* serielle Schnittstelle aus.
    ;* INPUT : A auszugebendes Zeichen
    ;* OUTPUT : -
    ;************************************************* ******
    Com1WriteByte: push B ; Reg. B retten
    Com1WriteByte1: mov B,S1CON ; S1CON in B zwischenspeichern
    mov C,B.1 ; Bit 1 ins Carry schreiben
    jnc Com1WriteByte1 ; Falls Carry = 0 warte weiter.
    anl S1CON,#11111101B ; SendeFlag loeschen (TI1)
    mov S1BUF,A ; Zeichen in SendeBuffer laden
    pop B ; Restore Reg. B
    ret ; Return

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.01.2006
    Beiträge
    6
    Hallo!

    Die Antworten reichen mir schon.

    Danke euch allen.

    Gruß
    Holger

Berechtigungen

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