Home › Foren-Übersicht › BASCOM-AVR-Kurs › Des Rätsels Lösung......

Foren-Übersicht

Sie müssen eingeloggt sein, um zu antworten.

Thema: Des Rätsels Lösung......

Autor Beitrag

schube2

12 Beiträge

Neuer Benutzer
Neuer Benutzer

Read post 31-12-2009 15:04

Hallo die Leser des Forums,

eigentlich wollte ich hier mein Problem schildern.
Das Problem hatte ich selber gefunden und auch lösen können.
Ich denke den Vorgang doch einmal zu schildern, weil dieser „Hasenfuß“ nicht übersichtlich ist.
Mein Vorhaben ist ein Digitales Poti mit einer IR-Fernbedienung zu steuern.
Ein Mikrokontroller soll die IR-Daten in Form eines RC5-Kodes empfangen und die aufbereiteten Werte über den I2C-Bus zum Digitalen Poti senden.
Um das Programm besser zu testen werden die IR-Daten und einige weitere Werte auf einer LCD-Anzeige dargestellt. Die erste Variante der Programmierung verlief zufrieden stellend, sodaß ich das Programm erweitern konnte.
Dann kam eine Fehlermeldung die lautet: Error 61 Line:40 Lable not found [_Printword ]
BASCOM zeigte den Fehler nur am Ende des Programms an und nicht auf die eigentlich betreffende Zeile.
Da ich wusste was zuletzt geändert wurde konnte ich die Ursache dieser Fehlermeldung leicht einkreisen.

Was war geschehen, ein Teil des ursprünglichen Programmkodes vereinfacht zum nachvollziehen dargestellt:

Dieses Beispiel zählt die Variable „I“ in 20er Schritten hoch und stellt jeden Schritt auf der LCD-Anzeige dar. Nach erreichen des Endwertes beginnt das hoch zählen wieder von vorn.
______________________________
Dim I As Byte
Dim X As String * 10

Do
Cursor Off
Cls
Lcd "Wert: "
For I = 0 To 120 Step 20
X = Str(i)
X = Format(x , "0000")
Locate 1 , 7
Lcd I
Wait 1
Next I
Loop
End
________________________________


Der tatsächliche benötigte Wertebereich ist aber von 0 bis 1024, also 2 Byte bzw. ein Word:
ab hier kam die entsprechende Fehlermeldung
______________________________
Dim I As Word
Dim X As String * 10

Do
Cursor Off
Cls
Lcd "Wert: "
For I = 0 To 1020 Step 20
X = Str(i)
X = Format(x , "0000")
Locate 1 , 7
Lcd I
Wait 1
Next I
Loop
End
________________________________

Die Fehlermeldung war nicht sehr aufschlußreich und durch probieren wurde festgestellt das nur die Variablen mit der Dimensionierung Byte oder Single funktionierten.

Hier nun die Lösung des Rätsels:
Wie schon zu Anfang erwähnt hatte ich auch eine Routine zum empfang der IR-Daten.
Aus der BASCOM Hilfe hatte ich eine Library $lib "mcsbyte.lbx" übernommen.
Diese „Byte Library“ sorgt für einen kürzeren Programmkode beim compilieren.
Wie man sieht reduziert diese Library auch die Bereiche der Verwendung von Variablen.
Wird diese Library nicht benutzt dann hat man alle Möglichkeiten zur Dimensionierung der Variablen zur Verfügung.
Ich finde dieser Hasenfuß bringt einem genauso in Erstaunen wie wenn beim comilieren der Befehl
„ $sim “ im Quellkode noch stehen lässt.

Viele Grüße Bernd

Sie müssen eingeloggt sein, um zu antworten.

Elektor 02/2012 am Kiosk

Gratis-Newsletter

Folgen Sie Elektor auf...