Hallo Forum gemeinde und Bastler
ich habe eine folgende schaltung von My-AVR Buch Smiliey Blitzer nachgebaut....
Folgende Daten
ATmega8
Int0 = Start Eingang
Int1 = Stop Eingang
7Segment an PORT B
Ich wollte gern den SAA1064 Segmente Darahn Haben was ich auch sowiet hinbekommen habe
sehe bild
die zahl stimmt ja auf der anzeige nur die an ersten Transitoren hängen leuchten, es sollen aber 3 segmente sein?
hier mein code
wo habe ich da einen fehler drin, ich BITTE um rat und tipps
Mit Freundtlichen Grüßen
Th.Sch.
ich habe eine folgende schaltung von My-AVR Buch Smiliey Blitzer nachgebaut....
Folgende Daten
ATmega8
Int0 = Start Eingang
Int1 = Stop Eingang
7Segment an PORT B
Ich wollte gern den SAA1064 Segmente Darahn Haben was ich auch sowiet hinbekommen habe
sehe bild
die zahl stimmt ja auf der anzeige nur die an ersten Transitoren hängen leuchten, es sollen aber 3 segmente sein?
hier mein code
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portd = &B11110000
Portd = &B00001111 'Pullupwiederstande
Smiley Alias Portd
Const Smiley_lachen = &B11000000
Const Smiley_weinen = &B10100000
Const Smiley_aus = &B00000000
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , _
Db7 = Portb.2 , E = Portb.1 , Rs = Portb.0
Config Lcd = 20 * 4
Initlcd
Cursor Off
Const Saa1064_adresse = &H76 'H76 - I2C Adresse SAA1064 4x7Segmenten
'Config I2cdelay = 15 'delay von 5=20µs=50kHz,10=10µs=100kHz;5=5µs=200KHz
Config Scl = Portc.5 'I2C SCL Pin
Config Sda = Portc.4 'I2C SDA Pin
'Dim _lcd_e As Byte 'Daten LCD
'_lcd_e = 64
I2cinit
'Anzeige Hell und 4 Stellen Modus:
I2cstart
I2cwbyte Saa1064_adresse
I2cwbyte 0
I2cwbyte &B01110111
'Bit 0 = 1 4Stellen mit Multiplex
'Bit 4 bis 6 Helligkeit:
'000 = Aus
'001 = Hell
'011 = Mittel Hell
'111 = Sehr Hell
I2cstop
Wait 2
Cursor Off
Cls
Locate 1 , 3
Lcd "SMILIEY BlITZER"
Locate 2 , 2
Lcd "7Segment & I2C-BUS"
Wait 2
Cls
'Timer fuer Hundertstel-Sekunden-Takt
Config Timer0 = Timer , Prescale = 1024 '1024 '10ms
On Timer0 Hundertsteltimer
Const Timervorgabe_0 = 178 '178
'Timer Fuer Multiplex
Config Timer1 = Timer , Prescale = 1 '1
On Timer1 Anzeige
Const Timervorgabe_1 = 25536
Config Int0 = Falling
On Int0 Starten
Enable Int0
Config Int1 = Falling
On Int1 Stoppen
Enable Int1
Enable Timer0
Enable Timer1
Enable Interrupts
Dim Zeit As Word
Dim Zahl As Word
Dim Zahl_temp As Word
Dim Geschwindigkeit As Single
Dim Einer As Word
Dim Zehner As Word
Dim Hunderter As Word
Dim Tausender As Word
Dim Ziffer As Byte
Dim Dezimalpunkt As Byte
Dim Dunkel As Byte
Dim Stelle As Byte
Dim I As Byte
Dim Segmente As Byte
Dim Modus As Byte
Const Bereit = 1
Const Messen = 2
Const Anzeigen = 3
Const Gesperrt = 4
Modus = Bereit
Dim Hundertstel_sekunden As Long
Zeit = 888 '888 'Wahr Voher 888
Dunkel = 0
Dezimalpunkt = 1
Cls
Locate 1 , 1
Lcd "LED TEST -> Smiliey"
Wait 2
Locate 2 , 1
Lcd "LED Smiliey Lachen"
Smiley = Smiley_lachen
Wait 3
Cls
Locate 1 , 1
Lcd "LED TEST -> Smiliey"
Locate 2 , 1
Lcd "LED Smiliey Weinen"
Smiley = Smiley_weinen
Wait 3
Cls
Locate 1 , 1
Lcd "LED TEST -> Smiliey"
Locate 2 , 1
Lcd "LED Smiliey aus"
Smiley = Smiley_aus
Wait 2
Cls
Locate 1 , 3
Lcd "Messergebnisse"
Do
Select Case Modus
Case Bereit:
Zahl = 8888
Dunkel = 0
Dezimalpunkt = 1
I2cstart
I2cwbyte Saa1064_adresse
I2cwbyte Stelle
I2cwbyte Segmente
I2cstop
Case Messen :
Zahl = Zeit
Locate 3 , 1
Lcd "Zeit= "
Lcd Zeit
If Zeit = 1000 Then Modus = Bereit 'Voher 1000
I2cstart
I2cwbyte Saa1064_adresse
I2cwbyte Stelle
I2cwbyte Segmente
I2cstop
Case Anzeigen :
Dunkel = 1
' Locate 3 , 1
'Lcd "Zeit"
'Lcd Zeit
' Zahl = Zeit 'nur zur testzwecken die zeit kurz anzeigen
' Wait 1 'nur zur testzwecken die zeit kurz anzeigen
Zahl = Round(geschwindigkeit )
Locate 4 , 1
Lcd "Km/H= "
Lcd Round(geschwindigkeit )
If Zahl > 50 Then 'wenn zu schnell dann Blinken
Smiley = Smiley_weinen
Locate 2 , 1
Lcd "Smiliey Traurig"
For I = 1 To 5 '5
Dunkel = 0
Waitms 500
Dunkel = 1
Waitms 500
Next
Else
Smiley = Smiley_lachen
Locate 2 , 1
Lcd "Smiliey Lachen"
Wait 3
End If
Smiley = Smiley_aus
Dunkel = 1
Wait 2
Modus = Bereit
Case Gesperrt
Dezimalpunkt = 0
Wait 2
Modus = Bereit
End Select
Gosub Anzeige
Loop
End
'Multiplexer: (Zahl wird zerlegt und angezeigt)
Anzeige:
Timer1 = Timervorgabe_1
Zahl_temp = Zahl
Einer = Zahl_temp Mod 10
Zahl_temp = Zahl_temp - Einer
Zahl_temp = Zahl_temp / 10
Zehner = Zahl_temp Mod 10
Zahl_temp = Zahl_temp - Zehner
Zahl_temp = Zahl_temp / 10
Hunderter = Zahl_temp Mod 10
Zahl_temp = Zahl_temp - Hunderter
Zahl_temp = Zahl_temp / 10
Tausender = Zahl_temp Mod 10
If Stelle < 4 Then
Incr Stelle
Else
Stelle = 1
End If
If Stelle = 1 Then Ziffer = Einer
If Stelle = 2 Then Ziffer = Zehner
If Stelle = 3 Then Ziffer = Hunderter
If Stelle = 4 Then Ziffer = Tausender
Select Case Ziffer
Case 0 : Segmente = &B00111111
Case 1 : Segmente = &B00000110
Case 2 : Segmente = &B01011011
Case 3 : Segmente = &B01001111
Case 4 : Segmente = &B01100110
Case 5 : Segmente = &B01101101
Case 6 : Segmente = &B01111101
Case 7 : Segmente = &B00000111
Case 8 : Segmente = &B01111111
Case 9 : Segmente = &B01101111
End Select
If Stelle = 2 And Zahl < 10 Then Segmente = &B00000000
'fuehrende Null Dunkel
If Stelle = 3 And Zahl < 100 Then Segmente = &B00000000
'fuehrende Null Dunkel
If Stelle = 4 And Zahl < 1000 Then Segmente = &B00000000
'fuehrende Null Dunkel
If Dunkel = 1 Then Segmente = &B00000000
'If Dezimalpunkt = Stelle Then Segmente = Segmente Or H80
I2cstart
I2cwbyte Saa1064_adresse
I2cwbyte Stelle
I2cwbyte Segmente
I2cstop
Return
Hundertsteltimer:
Timer0 = Timervorgabe_0
Incr Hundertstel_sekunden 'Auskommentiertes wenn teilung gewuenscht
If Hundertstel_sekunden = 10 Then
Incr Zeit
Hundertstel_sekunden = 0
End If
Return
Starten:
If Modus = Bereit Then
Start Timer0
Zeit = 0
Modus = Messen
Dunkel = 1 'für testzwecke auf 0 setzen
Dezimalpunkt = 1
End If
Return
Stoppen:
If Modus = Messen Then 'nur wenn Zeitmessung schon laeuft. nicht beimRückwärtsfahren Rueckwaertsfahren
Stop Timer0
' Geschwindigkeit = Strecke / Zeit
Geschwindigkeit = 5 / Zeit '5 Meter / Hunderstelsekunde
Geschwindigkeit = Geschwindigkeit * 100 ' m/s
' M / S * 60 * 60 / 1000 - > Km / H
Geschwindigkeit = Geschwindigkeit * 3600
Geschwindigkeit = Geschwindigkeit / 1000 ' Km/h
Modus = Anzeigen
Dezimalpunkt = 0
Else
Modus = Gesperrt
End If
Return
wo habe ich da einen fehler drin, ich BITTE um rat und tipps
Mit Freundtlichen Grüßen
Th.Sch.