hallo zusammen, habe ein kleines problem und zwar: ich habe einen atmega8 ich sende sachen vom vb.net in den avr, das funst alles super sehe ich alles im lcd, jetzt sende ich im eine variable und die soll er dann in sich im eeprom speichern, aber ergend wie macht er es nicht. im atmega wird alles gesplittet funktion ach ok. ich sende zb "2 zustand" mit der case funktion sieht er die 2 geht von daher dann in ein sub sieht da noch dann "zustand" und gibt mir seine werte aus als print. aber wenn ich sende " program ampere 100", dann sehe ich im lcd den eingang richtig, er sieht auch dann "program" geht auch in das sub dafuer, sieht da "Ampere" aber dann ueber nimmt er nicht die "100" program bsp. der ablauf ist ja so ok deshalb nur der teil fuer die uebergabe: achso es ist bascom. 'Beispiel des splits 'program AMPERE 123 'Command_array(1) Command_array(2) Command_array(3) Dim Ampereeeprom As Eram String * 3 Dim Ampere As String * 3 .. .. .. Case "AMPERE" Ampere = Command_array(3) Ampereeeprom = Ampere Locate 1 , 1 Lcd Ampere ; " " ; Ampereeeprom habe ich da einen denk fehler oder muss ich es noch durch mit input oder inkey machen, weil funktion mit denn beiden war nicht vorhanden. danke im vorraus an alle die mir helfen koennen. dietmar
das ist wohl richtig aber mit der deklarierung (Dim Ampereeeprom As Eram String * 3) sollte laut aussage es auch so gehen, da Eram eine direckter string vom eeprom ist. oder habe ich da was falsch verstanden. weil im beispiel bascom ist writhe oder read nicht vorhanden.
Ah du meinst die Beschreibung beim DIM "ERAM variables only can be assigned to SRAM variables, and ERAM variables can be assigned to SRAM variables. You can not use an ERAM variable as you would use a normal variable." http://avrhelp.mcselec.com/dim.htm Folgendes wäre demnach problematisch, weil keine Zuweisung einer ERAM variablen an/von einer SRAM Variablen: Lcd Ampere ; " " ; Ampereeeprom Und aus Sicht der EEPROM Beanspruchung ist problematisch, dass Ampereeeprom immer geschrieben wird auch wenn altes Ampereeeprom und neues Ampere gleich sind.
hallo stefan danke schon mal fuer deine antwort, mein groesstes problem ist momentan wohl, das der Command_array(3) nicht an Ampere uebergeben wird, weil ich sehe den im lcd keinen wert von ampere, aber ich kann vom program sehen das er bis dahin koreckt laeft, aber ergend wie denke ich mal das er den wert nicht uebergibt oder uebernimmt. ich habe die funktion mal erweiter mit dem befehl, ausgabe an lcd case aufgerufen und die ausgabe kommt auch richtig, aber die zeilen ampere und ampereeeprom seht nur 0 0. wo dran ich sehe das er den wert wohl nicht uebernimmt. wo ist jetzt mein genk fehler. Case "AMPERE" Ampere = Command_array(3) Ampereeeprom = Ampere Locate 1 , 1 Lcd Ampere ; " " ; Ampereeeprom Locate 2 , 1 Lcd " CASE Aufgerufen"
Dann würde ich mir ansehen, wie Command_array(3) erzeugt wird... Und was zu dem fraglichen Zeitpunkt (Ampere = Command_array(3)) tatsächlich darin enthalten ist:
1 | Case "AMPERE" |
2 | ' Debugcode |
3 | Ampere = "123" |
4 | Locate 2 , 1 |
5 | Lcd Ampere ; " DBG[" ; Command_array(3) ; "]" |
6 | ' Originalcode |
7 | Ampere = Command_array(3) |
8 | Ampereeeprom = Ampere |
9 | Locate 1 , 1 |
10 | Lcd Ampere ; " " ; Ampereeeprom |
hallo stefan, also ich sehe ich send 100 ampere LCD 123 123 DBG(100) da dran sehe ich split ist ok
LCD Anzeige ist so? +-------------------+ LCD |123 | Zeile 1 |123 DBG[100] | Zeile 2 +-------------------+ Dein () statt [] in in obigem Code zähle ich mal als Tippfehler. Das sieht dann so aus, als ob die Zuweisung Ampere = Command_array(3) nicht funktioniert. Der Wert in Ampere aus Zeile2 ist nach der Zuweisung immer noch in Amspere drin und erscheint in Zeile 1. Und die Zuweisung Ampereeeprom = Ampere funktioniert nicht. In Zeile 1 taucht Ampere auf, aber nicht Ampereeeprom, das ja den gleichen Wert haben müsste. Mit dem bisherigen Quelltext geht es hier nicht weiter. Dieser Bug hat sich sonstwo gut versteckt.
stimmt der der wert wird nicht ins eeprom geschrieben und ich verstehe nicht warum
Es ist ja noch schlimmer! Der Wert wird schon nicht in Ampere geschrieben. Dort steht bei der Ausgabe von Zeile 1 immer noch der Inhalt vom Debugcode (Ampere = "123") drin, obwohl es eine Zuweisung Ampere = Command_array(3) gibt und Command_array(3) den Text 100 enthält (sichtbar an der Ausgabe DEBG[100]). Command_array ist doch als Array von Strings dimensioniert, oder? Nur zur Sicherheit! Wenn schon die einfache Kopieraktion von Command_array(3) nach Ampere scheitert, wäre es wundersam, wenn die kompizierte Kopieraktion von Ampere nach Ampereeeprom funktionieren würde. Also den EEPROM Code zeitweise rausnehmen und an die Behebung von Problem #1 gehen. Danach kann man sich mit dem EEPROM befassen.
also der wird wird jetzt uebernommen und auch richtig. du musst nur den abfrage von lcd ampere nach Ampere = Command_array(3) setzen. weil sonst nimmt er immer als erstes Ampere="123"
jetzt fehlt nur noch das verflixte eeprom Case "AMPERE" Ampere = Command_array(3) Locate 2 , 1 Lcd Ampere ; " DBG[" ; Command_array(3) ; "]" Ampereeeprom = Ampere Writeeeprom Ampere , Label2 Readeeprom Ampere , Label2 Ampere = Ampereeeprom Locate 4 , 1 Lcd "NEUE AMPERE" ; Ampere
Die Ampere="123" Zuweisung bei (1) war extra im Debugcode drin, damit ich sehe, ob überhaupt eine Zuweisung eines sicheren Strings an Ampere möglich ist. Über den Inhalt von Command_array(3) hatte ich zu dem Zeitpunkt noch keine Sicherheit. In Case "AMPERE" ' Debugcode Ampere = "123" ' (1) Locate 2 , 1 Lcd Ampere ; " DBG[" ; Command_array(3) ; "]" ' Originalcode Ampere = Command_array(3) ' (2) Ampereeeprom = Ampere Locate 1 , 1 Lcd Ampere ; " " ; Ampereeeprom ' (3) ist ja danach bei (2) die Originalzuweisung drin. Die von dir berichtete LCD Ausgabe passt aber nicht dazu: In (3) taucht in der Zeile 1 des LCDs die 123 auf, d.h. (2) funktioniert nicht. Es bringt meiner Meinung nach nur Verwirrung, wenn man die DIM ERAM Methode mit der WRITEEEPROM/READEEPROM Methode mischt. Also bei einer Methode bleiben. Wenn du READEEPROM/WRITEEEPROM ausprobieren willst, vergiss $EEPROM/$DATA nicht! Case "AMPERE" READEEPROM Ampere , LabelAmpere LOCATE 1 , 1 LCD "Ampere alt: " ; Ampere IF Ampere <> Command_array(3) THEN WRITEEEPROM Command_array(3) , LabelAmpere READEEPROM Ampere , LabelAmpere END IF LOCATE 2 , 1 LCD "Ampere neu: " ; Ampere ... END Datenimeeprom: $EEPROM LabelAmpere: DATA "999" $DATA END
jetzt gibt er mir nur noch fehler invalid datatyp labelampere variable no deminsoniert aber ich danke dir jetzt schon mal fuer deine hilfe
Dann stimmt die Position des Labels nicht. Ich habe de Position am Programmende aus einem Bespiel des Manuals übernommen. Verschiebe den $EEPROM/$DATA Block an den Programmanfang, so dass Labelampere früher bekannt ist. Hier ist ein Minimalbeispiel für den BASCOM-Simulator:
1 | $regfile = "m8515.dat" |
2 | $crystal = 4000000 |
3 | $baud = 19200 |
4 | $hwstack = 32 |
5 | $swstack = 10 |
6 | $framesize = 40 |
7 | |
8 | $sim ' BASCOM Simulator etwas beschleunigen, rausnehmen im Realcode |
9 | |
10 | Datenimeeprom: |
11 | $eeprom |
12 | Labelampere: |
13 | Data "999" |
14 | $data |
15 | |
16 | ' Default LCD Pins für den Simulator |
17 | Config Lcd = 16 * 4 |
18 | |
19 | Dim Ampere As String * 3 |
20 | Dim Command_array(3) As String * 3 |
21 | |
22 | Cls |
23 | Do |
24 | Command_array(3) = Str(rnd(999)) ' Simulierte Eingabe |
25 | Locate 1 , 1 |
26 | Lcd "C_A(): " ; Command_array(3) |
27 | Readeeprom Ampere , Labelampere |
28 | Locate 2 , 1 |
29 | Lcd "EEPROM alt: " ; Ampere |
30 | If Ampere <> Command_array(3) Then |
31 | Locate 3 , 1 |
32 | Lcd "Update EEPROM" |
33 | Writeeeprom Command_array(3) , Labelampere |
34 | Readeeprom Ampere , Labelampere |
35 | End If |
36 | Locate 4 , 1 |
37 | Lcd "EEPROM neu: " ; Ampere |
38 | Loop |
39 | End |
das war es, er mag die eepromm sachen nicht am ende stehen haben, welch ein scheiss beim suchen. aber ich danke dir sehr bei der hilfe des problemes, ich will hoffen ich habe dir nicht zuviel zeit geraubt, ab sonntag abend. danke dietmar wenn ich andere probleme habe kann man dich dann erreichen.
> wenn ich andere probleme habe kann man dich dann erreichen.
Null Problemo: Ich treibe mich häufiger hier rum :)
Hallo Dietmar, kannst Du bitte mal den Code für VB.net (der Teil der sich mit dem Senden an COM beschäftigt) posten ? Danke und Gruss Frank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.