PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C PCF8574 und 7-Segment-Anzeigen



DEAF BOY
08.07.2009, 16:49
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?

http://s1b.directupload.net/images/090708/s7iqpzqm.jpg


$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

Yossarian
08.07.2009, 19:53
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