PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD zeigt nur ganz kurz an und ist wieder leer



TobiasBlome
23.05.2007, 19:56
Es ist, als wen man etwas an das LCD sendet und sofort CLS hinteher schickt...

Ich habe zum testen den Wait 3 sekunden befehl reingechrieben und nun blitzt der Text nur noch ganz kurz auf...

Was ist denn daran falsch?!

Tobias



$regfile = "m8def.dat" 'AT-Mega8
$crystal = 8000000 'Quarz: 8 MHz INTERN!!!
'$baud = 1200 'Baudrate der UART: 2400 Baud



'Konfiguration LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portd.6 , E = Portd.7 , Rs = Portb.0
Cursor Off Noblink ' Cursor aus


'Timer
'Config Portc = Input
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64 'FÜR PWM!!!
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64 'FÜR PWM!!!
Config Timer0 = Timer, Prescale = 1024
On Timer0 Timer0
Const Timervorgabe = 61
Enable Timer0
Enable Interrupts


'-------------------------------------------------------------------------------
'Ein- Ausgänge:

Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang
Ddrc = &B0000011 '1 Ausgang, 0 Eingang = Pin PC6-2 als Eingang; 1-0 als Ausgang
Ddrd = &B11111011 '1 Ausgang, 0 Eingang = Pin PD7-0 als Ausgang; 0 als Eingang (Freigabe)
'Portc = &B11111111 'PC0...PC7 auf High setzen
Portb.1 = 0 'damit der Motor nicht kurzzeitig anläuft



'-------------------------------------------------------------------------------
' Variablen
'-------------------------------------------------------------------------------
Dim Anzeige_z As Byte 'Zähler Anzeige
Dim Anzeige_auto As Bit
Dim Anzeige_hand As Bit
Dim Anzeige_e As Bit

Dim Analog_in1 As Word '=0-1023 vom Analogeingang
Dim S1 As Bit 'Schalter 1
Dim S2 As Bit 'Schalter 2
Dim S3 As Bit 'Schalter 3
Dim S3_m As Bit 'Schalter 3 MERKER

Dim Pro1 As Integer
Dim Pro2 As Single
Dim Proz As Integer

Dim Pwm1 As Single
Dim Pwm As Integer

Dim Taste_s1 As Byte

'Anzeige



'-------------------------------------------------------------------------------
'Programm:
'-------------------------------------------------------------------------------

'----------
'ANNIMATION
'----------

'----------------------------
Start Adc
Cls 'LCD löschen

Anzeige_auto = 1
Anzeige_hand = 0
Anzeige_e = 0



Do
Portb.5 = 1 'LCD Beleuchtung an

If Pinc.3 = 0 Then 'Schalter 1
S1 = 1
Else
S1 = 0
End If

If Pinc.4 = 0 Then 'Schalter 2
S2 = 1
Else
S2 = 0
End If

If Pinc.5 = 0 Then 'Schalter 3
S3 = 1
Else
S3 = 0
End If


Wait 3


'Analogeingänge auslesen:
'Analog_in1 = Getadc(1) 'Wert aus Analogeingang laden
'
'
''Umrechnung Eingang -> %
' Pro1 = Analog_in1 - 16 'Prozent1Wert analog 16-90 also -16 = 0-74
' Pro2 = Pro1 * 1.351 'Rechnen: 100% / max(74) = 1.351
' Proz = Round(pro2)
'
''Umrechnung % -> PWM
' Pwm1 = Proz * 2.55
' Pwm = Round(pwm1)
'
''Motorsteuerung
'If Pind.2 = 1 Then
'Compare1a = Pwm
'Else
'Compare1a = 0
'End If


'---ANZEIGE AUTO WÄHLEN ---------------------------------------
If Anzeige_hand = 1 And S1 = 1 And S2 = 0 And S3 = 0 Then

'Anzeige_auto = 1
'Anzeige_hand = 0
'Anzeige_e = 0

End If


'---ANZEIGE HAND WÄHLEN---------------------------------------
If Anzeige_auto = 1 And S3 = 1 And S2 = 0 And S1 = 0 Then

Anzeige_auto = 0
Anzeige_hand = 1
Anzeige_e = 0

End If


'---ANZEIGE "E" WÄHLEN---------------------------------------
If Taste_s1 => 120 And S2 = 0 And S3 = 0 Then 'ca. 3 Sekunden
Taste_s1 = 0

'Anzeige_auto = 0
'Anzeige_hand = 0
'Anzeige_e = 1

End If

Wait 3

'-------------------------------------------------------------
If Anzeige_z => 40 Then 'Wenn zähler voll, dann zur ausgewählten Anzeige gehen!
Anzeige_z = 0

If Anzeige_auto = 1 Then
Goto Anzeige_auto
End If

If Anzeige_hand = 1 Then
Goto Anzeige_hand
End If

If Anzeige_e = 1 Then
Goto Anzeige_e
End If

End If

Wait 3
'===RS232===



'Print "ANZEIGE_Z: " ; Anzeige_z , 'Zähler Anzeige
'Print "Anzeige_Auto: " ; Anzeige_auto ,
'Print "Anzeige_Hand: " ; Anzeige_hand ,
'Print "Anzeige_E: " ; Anzeige_e ,

'print "Analog in: " ; Analog_in1 , '=0-1023 vom Analogeingang
'Print "S1: " ; S1 , 'Schalter 1
'Print "S2: " ; S2 , 'Schalter 2
'Print "S3: " ; S3 , 'Schalter 3
'Print "S3_m: "; S3_m , 'Schalter 3 MERKER

'Print "Pro1: "; Pro1 ,
'Print "Pro2: " ; Pro2 ,
'Print "Proz: " ; Proz ,

'Print "PWM1: "; Pwm1 ,
'Print "PWM: "; Pwm ,

'Print "Taste_s1: " ; Taste_s1 ,

Loop



'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------
Timer0: 'Timer1-Interruptroutine (40 x pro Sekunde)
Timer0 = Timervorgabe
Incr Anzeige_z

If S1 = 1 Then 'soll nur hochgezählt werden, wenn Taste links gedrückt
Incr Taste_s1
Else
S1 = 0
End If

Return



'------------------------------------------
Anzeige_auto:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"

Locate 2 , 1
Lcd Str(s1 , "x")
Locate 2 , 2
Lcd Str(s2 , "x")
Locate 2 , 3
Lcd Str(s3 , "x")


Locate 2 , 6
Lcd ">AUTO<"
Locate 2 , 12
Lcd "Hand"
Locate 2 , 16
Lcd Str(anzeige_z , "x")

Return

'------------------------------------------
Anzeige_hand:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"

Locate 2 , 1
Lcd "back"
Locate 2 , 8
Lcd "-"
Locate 2 , 14
Lcd "+"

Return


'------------------------------------------
Anzeige_e:
Cls
Locate 1 , 1
Lcd "Drehzahl:"
Locate 1 , 11
Lcd Str(proz , "X") ; " %"

Locate 2 , 1
Lcd Str(analog_in1 , "xxxx") ; "B"
Locate 2 , 7
Lcd Str(pwm , "x") ; "PWM"

Return

Dirk
23.05.2007, 20:05
Hi Tobias,

ich habe nicht dein ganzes Prog durchgeguckt, aber würde "Timer0" nicht auch als Label für die ISR nehmen, weil Timer0 ein reserviertes Wort ist.

Gruß Dirk

TobiasBlome
23.05.2007, 20:43
Hallo Dirk,
habe ich geändert - leider ohne Erfolg...
Da muss noch etwas anderes sein

Tobias

TobiasBlome
23.05.2007, 20:49
kann das damit zu tun haben dass ich die Frequenz von 1MHz auf 8 erhöht habe?!

Andree-HB
23.05.2007, 23:05
...hast Du denn auch die Frequenz in den Fuses des MC geändert ?

Jaecko
24.05.2007, 06:53
Im oberen Block steht ein "Baud" ganz allein ohne weitere Angaben. Fehlt da nicht noch die Angabe, welche Rate verwendet werden soll?

chr-mt
24.05.2007, 07:20
Hi,


If Anzeige_auto = 1 Then
Goto Anzeige_auto
End If

Ersetze mal die goto's durch Gosub's. ;)


Gruß
Christopher

TobiasBlome
24.05.2007, 14:54
Hallo,
- also die Fuses habe ich geändert
- das Baud steht da als Kommentar (?) ich hatte zum Fehlersuchen div. sachen gesendet...
-GoSub? werd ich gleich mal versuchen

Tobias

TobiasBlome
24.05.2007, 15:35
JUHUUUUUUUUUUUU!!!
@chr-mt:
GoSub!!! das war der Fehler... ;-)
Kannst du mir noch erklären warum - also ich habe gosub nocht niee benuzt... immer nur goto

Danke für eure Hilfe!!!
Tobias

vklaffehn
24.05.2007, 16:00
Hallo!

Ich hab zwar noch nie was mit Bsacom gemacht, aber BASIC generell kenne ich.
Es gibt einen grundlegenden Unterschied zwischen 'goto' und 'gosub' :

goto : springt an die angegebene Stelle und setzt das Programm dort fort

gosub: springt an die angegebene Stelle, merkt sich, von wo es gesprungen ist, und bei 'return' springt es zurück(!), direkt hinter das 'gosub' und macht da weiter.

MfG Volker

TobiasBlome
24.05.2007, 16:36
oh - gut zu wissen! Danke!