PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komische Fehler in Bascom? was ist falsch???



dremler
22.12.2007, 22:30
wie ist die oben genannte frage zu beantworten? ich denke ja bin mir aber nicht sicher ...

dankeschön

Ratber
22.12.2007, 22:49
Das läst sich sehr leicht ohne besonderes Equip herausfinden indem man einfach einen langen Wait nimmt und dann einen IRQ auslöst.

Zb. Wait 10 und bei einem Pin-IRQ (Taster am Pin) eine LED an einem anderen Pin Toggelt.(Debounce nicht vergessen)

dremler
22.12.2007, 23:26
gut die frage hat sich eh erledigt das ichs nu ganz anders mach;) trotzdem danke....

nun hab ich ein anderes problem.

ich möchte 7 zeichen auswerten ->so aufgebaut:

"licht:1"

demnach muss ich 7 zeichen empfangen


da ich das rn128 funk board habe.... mache ich das mit


Do
Zahl = Zahl + 1
Z = Inkey()
If Z <> 0 Then Licht = Licht + Chr(z)
If Len(licht) = 7 Or Zahl = 20 Then Exit Do
Loop

zahl is sowas wie ein überlauf das die schleife nicht ewig weiterläuft wenn nix kommt...(ja hätte auch ne for to next schleife nehmen können.

dannach folgt das:

If Len(licht) = 7 Then
Tempo = Mid(licht , 7 , 1)
Modus = Val(tempo)
Select Case Modus

Case 0 'beide Modis aus
Portb.6 = 0
Portb.7 = 0

Case 1 '2. Blinkmodus an
Portb.6 = 1
Portb.7 = 0

Case 2 'Landelichter an
Portb.6 = 0
Portb.7 = 1

Case 3 'beide Modis an
Portb.6 = 1
Portb.7 = 1

End Select
End If

hier meckert er 4 mal...ka warum...




in der zeile:
tempo=mid(lciht,7,1)
der fehler :
Error:46 Assignement error [Tempo: 0 MID(LICHT,7,1):200]

dann
modus=val(tempo)
der fehler :
Error:46 Assignement error [MODUS: 0 VAL(TEMPO):200]


error:7 IF THEN expectet [158]

der letzte

error:123 END IF expectet

vor allem die letzten 2 versteh ich nicht....is ja alles da?!stört sich bascom an dem select case darin???

Ratber
22.12.2007, 23:59
Ich sehe nicht wo du synchronisierst.
Wo willst du wissen wo Anfang und Ende ist ?

Ich würde es mit Startbit,Stopbit und am besten noch mit CRC-summe machen damit du weißt ob das "Telegramm" auch gültig ist.

dremler
23.12.2007, 10:17
hmm das is ja erst mal egal...ich will ja erst mal diese blöden fehler rausbekommen....dann kann ich den string noch überprüfen

PicNick
23.12.2007, 10:54
Is denn "tempo" sicher als "string" definiert ?

Wär besser, du stellst den ganzen Code (aber unzensiert) da rein.

dremler
23.12.2007, 11:12
ok..hier....das ganz lies noch einen temperatursensor aus..



$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 60
$swstack = 60
$hwstack = 60

$crystal = 16000000 'Quarzfrequenz
$baud = 19200 'Baudrate für Funkmodul
$baud1 = 9600 'Baudrate für MAX

Dim A As Single
Dim B As Single
Dim Z As Byte
Dim Zahl As Single
Dim Licht As String * 7

'Aus- und Eingänge

Ddrb = &B11000000




'I2C Deklarationen

Config Scl = Portd.0
Config Sda = Portd.1


Declare Function I2cstart() As Byte
Declare Sub Ic2send(byval Databyte As Byte) As Byte
Declare Sub Funtion I2creceive(byref Databyte As Byte) As Byte
Declare Sub Sub I2cstop
'Deklaration abgeschlossen


Config Pine.2 = Output
Rdy_hostempfangsbereit Alias Porte.2 'Auf Low setzen wenn Empfangsbereit für Daten vom Funkmodul

Config Pine.5 = Input
Bsy_funkmodulsendebereit Alias Porte.5 'Ist Low wenn Funkmodul frei zum senden


Open "com2:" For Binary As #2 'Ausgabe über zweite serielle Schnittstelle (MAX)


Sound Portg.2 , 2000 , 800 'gibt einen langen Kontrollton aus
Sound Portg.2 , 1000 , 600 'gibt einen kurzen Kontrollton aus



Config Serialin = Buffered , Size = 120
Config Serialout = Buffered , Size = 120

Config Serialout1 = Buffered , Size = 120
Enable Interrupts
' ---------------------------------------------------





Print "### Initalisierung erfolgreich abgeschlossen! ###" 'Kopfzeilen senden
Print "### Dieses Programm wurde im Rahmen einer Facharbeit von Stefan Rau geschrieben. ###"
Print ""

Wait 1





Print "### Messung initalisieren... ###"
Wait 1



'i2cstart


Dim Device As Byte
Dim Deviceread As Byte
Dim Lowtemp As Byte
Dim Hightemp As Byte
Dim Value As Word '!!!!!!!
I2cinit

Device = 144 'Wenn alle Adressleitungen des 1621 auf GND sind.
Deviceread = 145

'----------------------------------------------Hauptprogramm------------------------------------------------------------
B = 0
Do

I2cstart
I2cwbyte Device
I2cwbyte &HEE 'Temperaturmessung anstoßen
I2cstop

I2cstart
I2cwbyte Device
I2cwbyte &HAA 'Temperaturmessung Lesekommando
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack 'LSB holen
I2crbyte Hightemp , Nack 'MSB holen

I2cstop

Value = Lowtemp * 10
If Hightemp = 128 Then
Value = Value + 5
End If






Print "Temp:" ; Value


B = B + 1
If B = 15 Then Sound Portg.2 , 20 , 800 : B = 0
Waitms 500 'Pause bis zur nächsten Messung




'lichtmodus überprüfen

Rdy_hostempfangsbereit = 0 'empfangsbereitschaft am funkmodul herstellen



Do
Zahl = Zahl + 1
Z = Inkey()
If Z <> 0 Then Licht = Licht + Chr(z)
If Len(licht) = 7 Or Zahl = 20 Then Exit Do
Loop



If Len(licht) = 7 Then
Tempo = Mid(licht , 7 , 1)
Modus = Val(tempo)
Select Case Modus

Case 0 'beide Modis aus
Portb.6 = 0
Portb.7 = 0

Case 1 '2. Blinkmodus an
Portb.6 = 1
Portb.7 = 0

Case 2 'Landelichter an
Portb.6 = 0
Portb.7 = 1

Case 3 'beide Modis an
Portb.6 = 1
Portb.7 = 1

End Select
End If

'lichtmodustest
'Portb.6 = 1
'Wait 5
'Portb.6 = 0
'Wait 5
'ende lichtmodustest


Loop
End

PicNick
23.12.2007, 12:10
*grmpf*
Tempo, Modus: Diese beiden Seppeln hast du gleich gar nicht definiert, wohl, um nix falsch zu machen

Füg' das mal ein, und ein weiteres Weihnachtswunder wird geschehen


Dim Tempo As String * 3
Dim Modus As Byte

Das ist erstmal nur, damit Bascom nicht gar so verzweifelt ist.
Wenn's nicht funzt, reden wir weiter :-)

dremler
23.12.2007, 13:25
oha....das war mein fehler.....das hatte ich schon mal drinne aber als es net funktionierte hab ich alles was ich geändert hatte wieder rausgelöscht....dann hab ich das wohl vergessen...dankeschön...;)