Hallo ich würde gerne ein Zahlenschloss programmieren und benötige ein bißchen Hilfe.Ich weiß noch nicht genau wie sowas realisiert wird. Aufgabe: Zahlenschloss mit 4-5 Nummern. Eingabe über RC5 Code soll geändert werden können LCD ausgabe Also wie das mit dem LCD/RC5 funktioniert ist mir klar.Ich weiß nur nicht so richtig wie man den Code manuell ändern kann. Als erstes hatte ich vor mir eine Variable zu erstellen(für den Code). Dann wollte ich die RC5 Signale auslesen und mit If else kontrollieren. Soweit würde ich das auch alleine schaffen. Nur mit der Eingabe von Parametern kenne ich mich noch nicht aus.
Hallo Basti, Basti schrieb: > Eingabe über RC5 Damit meinst Du sicherlich dies: http://de.wikipedia.org/wiki/RC-5 und nicht dies: http://de.wikipedia.org/wiki/RC5 Richtig? Basti schrieb: > Ich weiß nur > nicht so richtig wie man den Code manuell ändern kann. Ich auch nicht, weil ich nicht weiss was Du vorhast. - Der Code kann bei Erstellung des Schlosses geandert werden koennen. - Der Code kann ueber RC-5 Fernbedienung geaendert werden. - Der Code kann ueber Programmieradapter im EEPROM geaendert werden. - Der Code kann durch mechanische Tasten am Zahlenschloss neu kodiert werden. - Der Code wird ueber DIP-Schalter am Zahlernschloss geandert. - ........... Beschreib doch bitte mal genauer, sonst wird Dir wahrscheinlich keiner helfen koennen. (Es sei denn, es hat jemand 'ne gute Kristallkugel und kann damit umgehen.) MfG, Balze aka AVR Noob
Also ich möchte gerne den Code über die Fernbedienung ändern können. Z.B. drücke Taste xy um dann den Code zu ändern.Dann weiß ich noch nicht wie ich den Code von Anfang bis ende abfragen kann. Also Ziffer 1 dann 2 usw. Wenn ich den Code in einer eizelnen Variable speichern möchte. Bis jetzt habe ich den Code 4 stellig in 4 Variablen abgespeichert Dann habe ich den mit einer If schleife kontrolliert Ist Variable1=Eingabe? wenn ja Ist Variable2=Eingabe usw. Bei der letzen Variable dann wenn wahr portxy=1 (öffne schloss) else springe zum Anfang. Was mir persönlich nicht gefällt ist das alles in 4 Variablem gespeichert ist das wird es mir nicht einfacher machen diese später zu ändern.
Was machst eigentlich, falls dein Controller mal stromlos ist? Was passiert dann mit dem geänderten Code?
Basti schrieb: > Was mir persönlich nicht gefällt ist das alles in 4 Variablem > gespeichert ist das wird es mir nicht einfacher machen diese später zu > ändern. Wie wäre es mit einem Array und Pointer-Addressierung? Oder mir dem Speichern aller Ziffern in einer längeren Variablen und Shiften beim Abfragen und Einlesen? Das müsste doch bei fast allen heutigen µC funktioniern, oder?
Wer misst misst Mist schrieb: > Was machst eigentlich, falls dein Controller mal stromlos ist? Was > passiert dann mit dem geänderten Code? Sofort nach der Eingabe im Flash speichern und beim Neustart den selbigen auslesen!
Hall Basti, am besten waere aber wohl ein Array von 8bit Werten. Die kannst Du dann in einer Schleife nacheinander abfragen. Ist einmal das Ergebnis ungleich, stratet die Schleife neu. So kannst Du auch einfach die Anzahl Deiner Nummern im Code variieren. In etwa so: #define Anzahl_Codes 4 main{ uint8_t Code_Array[Anzahl_Codes]; read_Code_from_EERPOM (&Code_Array, Anzahl_Codes) // aus EEPROM ins Array ! uint8_t counter = 0; for (;;){ if(read_RC-5 () == CodeArray[counter]{ counter++; if (counter == Anzahl_Codes) oeffnen (); } else counter = 0; } } MfG, Balze aka AVR Noob
Eventuell kannst du ja den Artikel in der Elektor 10/2010 http://www.elektor.de/jahrgang/2010/oktober/cl-3-das-digitale-zahlenschloss.1531038.lynkx als Denkanstoß benutzen und das Teil für deine Zwecke erweitern
Ich programmiere in Bascom kann mir jemand sagen wo ich Erklärungen zu Arrays finde?
Kann ja sein aber diese Diskussion soll hier nicht besprochen werden,habe mich für Bascon entschieden und dabei bleibt es auch solange ich das nicht im schlaf kann.
Basti schrieb: > Ich programmiere in Bascom kann mir jemand sagen wo ich Erklärungen zu > Arrays finde? google? http://lmgtfy.com/?q=bascom+array Bascom Onlinehilfe? http://avrhelp.mcselec.com/dim.htm
Basti schrieb: > Kann ja sein aber diese Diskussion soll hier nicht besprochen > werden,habe mich für Bascon entschieden und dabei bleibt es auch solange > ich das nicht im schlaf kann. Du hast das misverstanden. Der Fehler ist gar nicht so sehr, dass du BASCOM benutzt. Der Fehler betseht darin, dass du denkst das sich BASCOM von alleine lernt.
Mein Programm sieht bist jetzt so aus bin ich auf dem richtigen Weg?? $regfile = "m8def.dat".dat " $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portb.1 Config Lcd = 16 * 2 Config Lcdbus = 4 Dim Codearray(4)as Byte Dim Platz As Byte Config Rc5 = Pind.2 Config Portb.0 = Output Enable Interrupts Dim Address As Byte , Command As Byte Codearray(1) = 1 Codearray(2) = 2 Codearray(3) = 3 Codearray(4) = 4 Do Getrc5(address , Command) If Address <> 255 Then Command = Command And &B01111111 If Address = 8 Then If Command = Codearray(1) Then Toggle Portb.0 Cls Cursor Off Lcd "Code angenommen "; Waitms 500 End If End If Else End If Loop End
Keine Ahnung, programmiere in C :) Warum faengst Du nicht mit C (Assembler) an und lernst Bascom wenn Du C (Assembler) kannst ? ;-) MfG, Balze aka AVR Noob
Basti schrieb: > Mein Programm sieht bist jetzt so aus bin ich auf dem richtigen Weg?? Schwer zu sagen, von den wesentlichen Dingen ist ja noch kaum was zu sehen. Funktioniert es denn bisher? Ein Tip: Gewöhn dir gleich von vorne herein an, deinen Code einzurücken. Dann sieht man die logische Struktur viel besser
1 | Dim Address As Byte , Command As Byte |
2 | |
3 | Codearray(1) = 1 |
4 | Codearray(2) = 2 |
5 | Codearray(3) = 3 |
6 | Codearray(4) = 4 |
7 | |
8 | Do |
9 | |
10 | Getrc5(address , Command) |
11 | |
12 | If Address <> 255 Then |
13 | Command = Command And &B01111111 |
14 | |
15 | If Address = 8 Then |
16 | If Command = Codearray(1) Then |
17 | Toggle Portb.0 |
18 | Cls |
19 | Cursor Off |
20 | Lcd "Code angenommen "; |
21 | Waitms 500 |
22 | End If |
23 | End If |
24 | Else |
25 | End If |
26 | |
27 | Loop |
28 | |
29 | End |
Jetzt sieht man viel besser, welcher Code von welchem If abhängt. PS: Ich würde mir als allererstes eine Ausgabe einbauen, die nach Getrc5(address , Command) erst mal ausgibt, was denn da so empfangen wurde. Sowas könnte sich bei Fehlersuche als sehr nützlich erweisen. Und wenn das Programm fertig ist, entfernt man diese Ausgabe wieder.
Ich würde die Zahlen als String abspeichern, z.B. "154137". Dann ergibt sich die Länge automatisch durch die Länge des Strings, max würde ich 10 Byte festlegen. Der String wird im EEPROM gespeichert. Jede Ziffer wird in einen Empfangsstring eingelesen und dann die beiden Strings verglichen. Nach Öffnen oder einem Timeout wird der Empfangsstring geleert (genullt). Eine 11. Taste startet die Änderung. Danach muß der alte Code und 2* der neue Code eingegeben werden. Peter
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.