Also ich hab zwar auch nie bascom programmiert, aber ich hab ne c-control hier rumliegen, die Staub ansetzt ^^
Ich hab jetz beim Einlesen in die Materie also einen ähnlich unbefangenen Blick auf die Dinge wie tvgucker.
Als allererstes möchte ich dich auf die seite
http://avrhelp.mcselec.com/bascom-avr.html
verweisen, falls du die noch nicht kennst.
Beim sende Programm scheint mir so weit alles in Ordnung zu sein,
Beim Programm das die Daten auf dem LCD anzeigt ist mir Spontan folgendes ins Auge gesprungen.
Du Definierst die Eingabevariable A als "String", Benutzt jedoch zum Lesen vom Port das commando "Inputbin", Das liest so viele Bytes wie es braucht vom Port, In dem Fall meines Erachtens nach die Länge des Strings, die bei deiner Definition Aber 0 ist.
Ich würde da auf jeden Fall als erstes mal den Datentyp der Variable auf Byte ändern, weil du dann sicher sein kannst, dass er nur versucht 1 Byte vom Port zu lesen.
Gibt es eigentlich einen bestimmten Grund warum du "inputbin" benutzt und nicht "Input" ? Meines Erachtens nach ist Inputbin Ein Befehl um Einzelne Bits oder Bitfolgen von einem Stream zu lesen.
Das nächste was mir auffällt ist dass du für die Variable einmal Gross A und einmal Klein a benutzt. Ob das was ausmacht Weiss ich jetzt nicht, ich würde es auf jeden fall ausbessern.
Dass als allererstes 146 auf deinem Display erscheint Liegt wahrscheinlich daran, dass du die Variable zwar deklarierst, sie aber leerlässt. Das Display zeigt dann den Wert der Speicherzelle an in der die Variable abgelegt werden soll. Dieser kann bei jedem Reset des Prozessors einen Zufälligen Wert annehmen, Bei dir ist das dann evtl bevorzugterweise die 146.
Was mir dann noch komisch vorkommt ist dass du Den Befehl "Binval" benutzt. Dieser wandelt einen String der nur aus Nullen und Einsen besteht in die äquivalente Zahl um.
Stell dir vor du würdest am Pc Bildschirm auf in der Eingabeaufforderung den String "0011" eingeben Würde daraus mit diesem befehl das Byte 3.
Dir wird hier keine Fehlermeldung ausgegeben weil deine Variable als String definiert ist, du liest aber ein Byte vom Port. Das müsste eigentlich einen Fehler verursachen, zumindest würde ein Basic Debugger zur laufzeit eine Fehlermeldung schmeissen, dein AVR hat dazu aber keine Möglichkeit und macht einfach mit dem binäräquivalent des Strings weiter.
Ich denke dieser Befehl ist ein sehr guter Kandidat für den Fehler.
Der Befehl "LCD" erwartet als Variable einen String, mit Binval" übergibst du ihm hier aber ein Byte. Ich weiss nicht wie Er dann damit verfährt, aber du sagst es werden 3-stellige Zahlen ausgegeben. Wenn diese in jedem fall kleiner als 255 sind, dann ist davon auszugehen dass er Bytes einfach in das Char äquivalent umwandelt.
Du Wandelst hier Die daten vom Port zuerst von einem Byte In einen String (Inputbin A, A als String Definiert, und dann vom String in ein Byte ("Binval(a)"), wobei ein Fehler auftritt. Das übergibst du dann dem Befehl "LCD" Das das Byte wieder in einen String der Länge 3 umwandelt und ans LCD sendet.
Versuch doch einfach mal Deine Variable als Byte zu definieren, Denn das ist es ja schliesslich was du empfängst. Dieser Variable weist du der vollständigkeithalber sofort den Wert 0 zu.
Dieses Byte Übergibst du jetzt einfach mal Probehalber dem LCD- Befehl
Denn so weit wir gesehen haben wandelt dieser ein Byte wohl in einen 3-stelligen String um, Sonst würde er statt 3-stelligen Zahlen, die er ja anzeigt, irgendwelche wilden Zeichen ausgeben, nämlich genau das ASCII- äquivalent des Bytes, das "binval" erzeugt.
Wenn jemandem der anderen Helfer bei meinen geistigen Ergüssen, die grösstenteils aus vermutungen oder Schnell überflogenen befehlsbeschreibungen auf
http://avrhelp.mcselec.com/bascom-avr.html
resultieren, noch was auffällt oder gar sauer aufstößt, stutzt mich bitte zurecht.
Hoffe irgendwie nen Stoss in die richtige richtung gebracht zu haben.
MFG QUirin