-
        

Ergebnis 1 bis 2 von 2

Thema: I²C PCF8574 und 7-Segment-Anzeigen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.01.2005
    Ort
    Baden-Württemberg
    Alter
    37
    Beiträge
    127

    I²C PCF8574 und 7-Segment-Anzeigen

    Anzeige

    Hallo,

    es funktioniert mit zwei PCF8574 und zwei 7-Segment-Anzeigen.

    Es gibt ein kleines Problem.
    Atmega8 soll die Byte-Zufallszahlen RND(255) so lange generieren, bis die Byte "7" für IC1 und "109" für IC2 wiedergibt. Es soll dann die Zahlen "75" auf dem Segment erscheinen.
    Bei mir wird die IC2 jedoch gestoppt, nachdem die Byte "7" für IC1 erscheint.
    Wie kann ich trennen, so dass IC2 weiterläuft bis die richtige Byte erscheint, nachdem IC1 gestoppt wird.

    Wenn ich "Stop" rausnehme, zählt Atmega unendlich weiter ohne zu stoppen, auch wenn richtige Byte erscheint. Wie kann ich also "I2cwbyte B0" und "I2cwbyte B1" stoppen lassen?



    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    Dim B0 As Byte
    Dim B1 As Byte
    
    'IC1 PCF8574
    I2cstart
    I2cwbyte &H40
    I2cwbyte &H00
    I2cstop
    
    'IC2 PCF8574
    I2cstart
    I2cwbyte &H42
    I2cwbyte &H00
    I2cstop
    
    'I²C verbinden mit 7-Segment-Anzeige
    '###################################
    'P0 = a  =   1
    'P1 = b  =   2
    'P2 = c  =   4
    'P3 = d  =   8
    'P4 = e  =  16
    'P5 = f  =  32
    'P6 = g  =  64
    'P7 = DP = 128
    
    Do
    B0 = Rnd(255)                                               'Zufallszahlen generieren
    B1 = Rnd(255)                                               'Zufallszahlen generieren
    Waitms 50
    
    
    I2cstart
    I2cwbyte &H40
    I2cwbyte B0
    I2cstart
    If B0 = 7 Then                                              'Zahl "7" erscheint auf 7-Segment-Anzeige
    I2cwbyte 7
    Stop                                                        'PCF8574#1 soll stoppen bzw. PCF8574#2 weiterlaufen lassen
    End If
    I2cstop
    
    
    I2cstart
    I2cwbyte &H42
    I2cwbyte B1
    I2cstart
    If B1 = 109 Then                                            'Zahl "5" erscheint auf 7-Segment-Anzeige
    I2cwbyte 109
    Stop                                                        'PCF8574#2 soll stoppen bzw. PCF8574#1 weiterlaufen lassen
    End If
    I2cstop
    
    Loop

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    Wie ich das sehe, erzeugst Du B0 immer wieder neu und bleibst dadurch wieder in der ersten Schleife hängen, bis B0 den Wert 7 erhält.
    Eine Lösung wäre z.B zwei Schleifen zu machen.
    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

Berechtigungen

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