rolfw20
04.04.2006, 00:48
Hallo Leute,
ich habe ein kleines Programm geschrieben das auch im Simulator ohne fehler läuft. Dieses habe ich nun zum Mega16 geschickt, die Kontroll LED blinkt auch aber auf dem LCD kann ich nichts sehen.
Kann mir jemand sagen was ich falsch mache?
Da ich auch nicht weiß wie man das Textfenster für die Programme macht, hänge ich es einfach mal an.
$regfile = "m16def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 16
$crystal = 1000000 'Die Frequenz des internen Oszilators
Config Lcd = 16 * 1 'Display
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Dim A As Word
Dim B As Single
Config Portb.0 = Output
Config Portc = Input
Portc.0 = 1 'Internen Pullup einschalten c0 zum einlesen ADCwert unten
Portc.1 = 1 'Internen Pullup einschalten c1 zum einlesen ADCwert oben
Portc.2 = 1 'Internen Pullup einschalten c2 zum einlesen der Aktuellen ADCwertes und Berechnung des Phwertes
Portc.3 = 1 'Internen Pullup einschalten
Config Adc = Single , Prescaler = Auto , Reference = Off 'Init ADC
Dim Unten As Word 'benutzte Variablen
Dim Oben As Word
Dim Phwert As Single
Dim Phunten As Single
Dim Phoben As Single
Dim Messwert As Word
Dim Hilf1 As Single
Dim Hilf2 As Single
Dim Hilf3 As Single
Dim Hilf4 As Single
Dim Hilf5 As Single
Start Adc
Dim Taste As Byte , Sperre As Byte 'Sperre wird immer aud 1 gesetzt wenn ein oder mehrere Tasten gedrückt sind
'wenn keine Taste gedrückt ist wird die Sperre wieder auf 0 gesetzt
Phunten = 4.3 'einfache Festlegung des unteren Cal.punktes zum Test
Phoben = 9.6 'einfache Festlegung des oberen Cal.punktes zum Test
Do
Taste = Portc
If Taste = 14 And Sperre = 0 Then 'nur wenn taste 1 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Unten = Getadc(0)
Locate 1 , 1
Lcd "U=" ; Unten
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 13 And Sperre = 0 Then 'nur wenn taste 2 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Oben = Getadc(0)
Locate 1 , 1
Lcd "o=" ; Oben
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 11 Then 'nur wenn taste 4 gedrücktist wird der ADCwert gespeichert
Messwert = Getadc(0) 'und der Phwert wird berechnet
Hilf1 = Phoben - Phunten 'Berechnung in einzelschritten
Hilf2 = Oben - Unten 'da die gesammte Formel Fehler verursachte
Hilf3 = Hilf1 / Hilf2
Hilf1 = Messwert * Hilf3
Hilf2 = Hilf1 + Phunten
Hilf4 = Unten * Hilf3
Phwert = Hilf2 - Hilf4
'Phwert = Messwert *(phoben - Phunten ) /(oben - Unten ) + Phunten - Unten *(phoben - Phunten ) /(oben - Unten )
'Phwert = Messwert * Hilf1 / Hilf2 + Phunten - Unten * Hilf1 / Hilf2
'phwert = Messwert * Hilf3 + Phunten - Unten * Hilf3
'Phwert = Hilf4 + Phunten - Unten * Hilf3
'Phwert = Hilf5 - Hilf6
Locate 1 , 1
Lcd "M" ; Messwert ; "P" ; Phwert
Else
End If
If Taste = 15 Then 'wenn keine Taste gedrückt ist wird die Sperre wieder aufgehoben (0)
Sperre = 0
Else
End If
Toggle Portb.0 'test ob prozessor noch läuft
Waitms 50 'damit man auch ein blinken sieht
Loop
End
Für Eure Hilfe bin ich echt dankbar.
Gruß
Rolf
ich habe ein kleines Programm geschrieben das auch im Simulator ohne fehler läuft. Dieses habe ich nun zum Mega16 geschickt, die Kontroll LED blinkt auch aber auf dem LCD kann ich nichts sehen.
Kann mir jemand sagen was ich falsch mache?
Da ich auch nicht weiß wie man das Textfenster für die Programme macht, hänge ich es einfach mal an.
$regfile = "m16def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 16
$crystal = 1000000 'Die Frequenz des internen Oszilators
Config Lcd = 16 * 1 'Display
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Dim A As Word
Dim B As Single
Config Portb.0 = Output
Config Portc = Input
Portc.0 = 1 'Internen Pullup einschalten c0 zum einlesen ADCwert unten
Portc.1 = 1 'Internen Pullup einschalten c1 zum einlesen ADCwert oben
Portc.2 = 1 'Internen Pullup einschalten c2 zum einlesen der Aktuellen ADCwertes und Berechnung des Phwertes
Portc.3 = 1 'Internen Pullup einschalten
Config Adc = Single , Prescaler = Auto , Reference = Off 'Init ADC
Dim Unten As Word 'benutzte Variablen
Dim Oben As Word
Dim Phwert As Single
Dim Phunten As Single
Dim Phoben As Single
Dim Messwert As Word
Dim Hilf1 As Single
Dim Hilf2 As Single
Dim Hilf3 As Single
Dim Hilf4 As Single
Dim Hilf5 As Single
Start Adc
Dim Taste As Byte , Sperre As Byte 'Sperre wird immer aud 1 gesetzt wenn ein oder mehrere Tasten gedrückt sind
'wenn keine Taste gedrückt ist wird die Sperre wieder auf 0 gesetzt
Phunten = 4.3 'einfache Festlegung des unteren Cal.punktes zum Test
Phoben = 9.6 'einfache Festlegung des oberen Cal.punktes zum Test
Do
Taste = Portc
If Taste = 14 And Sperre = 0 Then 'nur wenn taste 1 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Unten = Getadc(0)
Locate 1 , 1
Lcd "U=" ; Unten
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 13 And Sperre = 0 Then 'nur wenn taste 2 gedrückt und die Sperre auf 0 ist wird der ADCwert gespeichert
Oben = Getadc(0)
Locate 1 , 1
Lcd "o=" ; Oben
Sperre = 1 'Sperre einschalten (1)
Else
End If
If Taste = 11 Then 'nur wenn taste 4 gedrücktist wird der ADCwert gespeichert
Messwert = Getadc(0) 'und der Phwert wird berechnet
Hilf1 = Phoben - Phunten 'Berechnung in einzelschritten
Hilf2 = Oben - Unten 'da die gesammte Formel Fehler verursachte
Hilf3 = Hilf1 / Hilf2
Hilf1 = Messwert * Hilf3
Hilf2 = Hilf1 + Phunten
Hilf4 = Unten * Hilf3
Phwert = Hilf2 - Hilf4
'Phwert = Messwert *(phoben - Phunten ) /(oben - Unten ) + Phunten - Unten *(phoben - Phunten ) /(oben - Unten )
'Phwert = Messwert * Hilf1 / Hilf2 + Phunten - Unten * Hilf1 / Hilf2
'phwert = Messwert * Hilf3 + Phunten - Unten * Hilf3
'Phwert = Hilf4 + Phunten - Unten * Hilf3
'Phwert = Hilf5 - Hilf6
Locate 1 , 1
Lcd "M" ; Messwert ; "P" ; Phwert
Else
End If
If Taste = 15 Then 'wenn keine Taste gedrückt ist wird die Sperre wieder aufgehoben (0)
Sperre = 0
Else
End If
Toggle Portb.0 'test ob prozessor noch läuft
Waitms 50 'damit man auch ein blinken sieht
Loop
End
Für Eure Hilfe bin ich echt dankbar.
Gruß
Rolf