- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: portpins abfragen und am LCD ausgeben

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    33
    Beiträge
    870
    Anzeige

    Powerstation Test
    Hi,
    du musst dafür natürlich das Config machen, also µC auswählen und so.
    Du musst das mit AND in einer Zeile schreiben, außerdem musst du das mit END abschießen.
    Schreib das Programm das nächste mal bitte in Code Tags.
    Hier der Code (hab ihn nicht getestet):
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    Schalter1 Alias Pina.0
    Schalter2 Alias Pina.1
    Schalter3 Alias Pina.2
    Schalter4 Alias Pina.3
    
    Config Pina.0 = Input
    Config Pina.1 = Input
    Config Pina.2 = Input
    Config Pina.3 = Input
    
    
    Do
    Cls
    If Pina.0 = 1 Then
    Lcd "3"
    Else
    Lcd "0"
    End If
    Waitms 100
    Loop
    End
    MfG Christopher \/


  2. #12
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    @ Christopher1
    danke, es funktioniert! ))

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    wie man merkt ist das ein Binäncode.
    ...genau - und damit kannst Du die Sache ziemlich vereinfachen. Du definierst eine Variable als Byte, setzt die Variable gleich PinA und setzt die ersten 4 Bits auf 0 (falls pinA.4 bis PinA.7 anderweitig besetzt sind). Damit hat Deine Variable genau den Wert, der auf den Ports A.0 bis A.3 in binärer Form anliegt. D.h. sind alle 4 Pins high, wäre die Variable 15, sind A.0, A.1 und A.3 high wäre die Variable 11 usw - ganz ohne UND-Verknüpfung. Den Wert der Variablen kannst Du dann direkt via LCD ausgeben!

    Als Code könnte das so aussehen:



    Code:
    $regfile = "m32def.dat" 
    $framesize = 32 
    $swstack = 32 
    $hwstack = 32 
    $crystal = 1000000 
    
    Config LCD....
    Dim Zahl as byte
    
    Do
    
    Zahl = Pina
    Zahl = Zahl AND &B00001111
    LCD Zahl
    
    Loop
    Die Geschichte mit "Zahl = Zahl AND &B00001111 setzt die bits 7-4 der Variablen Zahl auf 0 (x UND 0 ergibt immer 0), während sie die bits 3-0 unbeinflusst lässt (x UND 1 ergibt immer x).

    Alles klar?

    Daniel

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    > Alles klar?

    nicht alles! ))
    ich verwende Port A.
    und davon nur 4 pins. Also pa0, pa1, pa2, pa3.
    es soll immer nur eine einstellige Zahl sein.
    also nur 0-9.
    pa0 =1 lcd-1
    pa1 =1 Lcd-2
    pa0+1 =1 Lcd-3
    pa2=1 Lcd-4
    pa2+0 =1 Lcd-5
    u.s.w. bis 9.

    Wenns dir nichts ausmacht, kannst du den code ausschnitt posten?
    Währe sehr dankbar.

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    sorry für mein letzten post ))))

    also es funktioniert
    Danke
    PortA ist fertig.
    wollte jetzt selbstständig weiter machen mit portD.
    es gibt aber ein problem.

    so sieht mein Quellcome aus:

    $regfile = "m16def.dat"
    $crystal = 8000000

    Config Lcd = 16 * 4
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4

    Initlcd

    Dim Zahl As Byte
    Dim Zahl1 As Byte

    Cls
    Cursor Off
    Do
    Cls

    Zahl = Pina
    Zahl = Zahl And &B00001111
    Zahl1 = Pind
    Zahl1 = Zahl1 And &B00001111

    Locate 1 , 1
    Lcd Zahl
    Locate 1 , 2
    Lcd Zahl1

    Waitms 50
    Loop
    End

    was habe ich nun falsch gemacht?

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    was habe ich nun falsch gemacht?
    Auf den ersten Blick gar nichts
    Was passiert denn genau? Oder was passiert nicht?

    Vielleicht sind die 50 Millisekunden zu kurz - LCD-Displays brauchen verhältnismäßig viel Zeit, bis sie sichtbar (!) anzeigen. Hattest Du diese kurze Verzögerung auch drin, als es mit Port A funktionierte?
    Ansonsten verlängere das doch mal auf mindestens 200ms. Und wenn´s dann noch nicht klappt, schreib doch mal was passiert!

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Das problen ist gelöst.
    aber noch ein ist da.
    gibt es sowas auch für einen Grey-Code?
    Danke

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Auch wenn ich ihn noch nie benutzt habe: Der Befehl "GRAY2BIN" könnte Dir weiterhelfen. Ist in der Bascom-Hilfe in gewohnter Qualität beschrieben!

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    und sowas wie "GRAY2DEZ" gibt es nicht?

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Nö - weil Mikrocontroller ausschließlich im Binärsystem rechnen und arbeiten

    Am Beispiel der Zahl 4 (im Gray-Code 0110):
    PinA.2 und A.1 sind 1, der Rest ist 0.


    Zahl = Pina
    Zahl = Zahl AND &B00001111

    LCD Zahl würde jetzt "6" auf das Display bringen.

    Zahl = GRAY2BIN(Zahl) macht aus der Gray-4 (00000110) die Binär-4 (00000100)

    LCD Zahl bringt jetzt "4" auf´s Display.

    Nochmal: Dezimalzahlen kennt nur das Display! Im Controller wird immer mit Bytes gerechnet.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress