PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2x Atmel Mega32



Killer
03.04.2007, 18:49
Hallo,
ich habe zwei mega32 speziell verbunden, damit sie zahlen von 0-9 und zusätzlich + und - austauschen können. der eine prozessor ist eigendlich nur für die tastatur da (Chip1), der andere zum ausgeben der daten.
dem Chip1 habe ich folgenden quellcode aufgespielt:


Statusout = 1
Led = 0
Call Tastenabfrage()





Sub Tastenabfrage()
Do
Led = 0
If Null = 0 Then
Led = 1
Wert = 0
End If
If Eins = 0 Then
Wert = 1
Led = 1
End If
If Zwei = 0 Then
Wert = 2
Led = 1
End If
If Drei = 0 Then
Wert = 3
Led = 1
End If
If Vier = 0 Then
Wert = 4
Led = 1
End If
If Fuenf = 0 Then
Wert = 5
Led = 1
End If
If Sechs = 0 Then
Wert = 6
Led = 1
End If
If Sieben = 0 Then
Wert = 7
Led = 1
End If
If Acht = 0 Then
Wert = 8
Led = 1
End If
If Neun = 0 Then
Wert = 9
Led = 1
End If
If Plus = 0 Then
Wert = 10
Led = 1
End If
If Minus = 0 Then
Wert = 11
Led = 1
End If

If Enter = 0 Then
Call Eingabe()
End If
Loop
End Sub 'Tastenabfrage





Sub Eingabe()
Statusout = 0
Led = 0
Waitms 5
If Statusin = 0 Then
Statusout = 1
If Wert = 0 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 0
Dezi4 = 0
Dezi5 = 1
End If
If Wert = 1 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 0
Dezi4 = 1
Dezi5 = 0
End If
If Wert = 2 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 0
Dezi4 = 1
Dezi5 = 1
End If
If Wert = 3 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 1
Dezi4 = 0
Dezi5 = 0
End If
If Wert = 4 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 1
Dezi4 = 0
Dezi5 = 1
End If
If Wert = 5 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 1
Dezi4 = 1
Dezi5 = 0
End If
If Wert = 6 Then
Dezi1 = 0
Dezi2 = 0
Dezi3 = 1
Dezi4 = 1
Dezi5 = 1
End If
If Wert = 7 Then
Dezi1 = 0
Dezi2 = 1
Dezi3 = 0
Dezi4 = 0
Dezi5 = 0
End If
If Wert = 8 Then
Dezi1 = 0
Dezi2 = 1
Dezi3 = 0
Dezi4 = 0
Dezi5 = 1
End If
If Wert = 9 Then
Dezi1 = 0
Dezi2 = 1
Dezi3 = 0
Dezi4 = 0
Dezi5 = 1
End If
If Wert = 10 Then
Dezi1 = 0
Dezi2 = 1
Dezi3 = 0
Dezi4 = 1
Dezi5 = 1
End If
If Wert = 11 Then
Dezi1 = 0
Dezi2 = 1
Dezi3 = 1
Dezi4 = 0
Dezi5 = 0
End If
Waitms 5
Dezi1 = 0
Dezi2 = 0
Dezi3 = 0
Dezi4 = 0
Dezi5 = 0
Else
Call Eingabe()

End If
Call Tastenabfrage()





End Sub 'Eingabe





End


also die daten am anfang des quellcodes habe ich mal weggelassen.
der Chip2 hat dieses:



Statusout = 1
Call Status()









Sub Status()
If Statusin = 0 Then
Waitms 5
Statusout = 0
Call Ziffernabfrage()
Else
Call Status()
End If
End Sub





Sub Ziffernabfrage()
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 1 And Dezi4 = 1 And Dezi5 = 0 Then
Wert = 0
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 1 And Dezi4 = 0 And Dezi5 = 1 Then
Wert = 1
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 1 And Dezi4 = 0 And Dezi5 = 0 Then
Wert = 2
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 0 And Dezi4 = 1 And Dezi5 = 1 Then
Wert = 3
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 0 And Dezi4 = 1 And Dezi5 = 0 Then
Wert = 4
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 0 And Dezi4 = 0 And Dezi5 = 1 Then
Wert = 5
End If
If Dezi1 = 1 And Dezi2 = 1 And Dezi3 = 0 And Dezi4 = 0 And Dezi5 = 0 Then
Wert = 6
End If
If Dezi1 = 1 And Dezi2 = 0 And Dezi3 = 1 And Dezi4 = 1 And Dezi5 = 1 Then
Wert = 7
End If
If Dezi1 = 1 And Dezi2 = 0 And Dezi3 = 1 And Dezi4 = 1 And Dezi5 = 0 Then
Wert = 8
End If
If Dezi1 = 1 And Dezi2 = 0 And Dezi3 = 1 And Dezi4 = 0 And Dezi5 = 1 Then
Wert = 9
End If
If Dezi1 = 1 And Dezi2 = 0 And Dezi3 = 1 And Dezi4 = 0 And Dezi5 = 0 Then
Wert = 10
End If
If Dezi1 = 1 And Dezi2 = 0 And Dezi3 = 0 And Dezi4 = 1 And Dezi5 = 1 Then
Wert = 11
End If
Statusout = 1
Waitms 5
Call Ausgabe()
End Sub



Sub Ausgabe()
If Wert = 0 Then
Led = 0
End If
If Wert = 1 Then
Led = 1
Waitms 100
Led = 0
Waitms 100
End If
If Wert = 2 Then
Led = 1
Waitms 100
Led = 0
Waitms 100
Led = 1
Waitms 100
Led = 0
Waitms 100
End If
Call Status()
End Sub



also wenn ich jetzt [2] +[Enter] drücke müsste der Chip2 das empfangen und die LED müsste 2 mal leuchten (weiter hab ichs noch nicht geschrieben). das problem ist nur, es blinkt nicht!

wer kann mir helfen und sagen wo ich den fehler habe?

mfg Killer

Vitis
03.04.2007, 23:22
also die AND - Verknüpfung bei der If then, wird in bascom schonmal
nicht gehen, das mag das nicht.
Die Mainloopschleife vom Code1 in ne Sub verpacken
und anspringen per call ist unnötig.
hunderte If-Then kann man meist recht schön mit Switch lösen,
macht Code übersichtlicher.
Es scheint als ob Du binär parallel den Wert übergibst mit diversen
platzhaltern.
Die ganzen IF-Then vom Master kannste Dir durch Bitoperationen schenken. oder naja, fast schenken.

also, nehmen wir an wert ist gesetzt

dann kannst du schreiben
dezi0=wert.0
dezi1=wert.1
dezi2=wert.2 etc. etc.
... dezi7=wert.7
und schon haste die Bits gesetzt.
Das musst Du dann auch nur einmal machen und nicht für jedes
Bitmuster separat.

Killer
04.04.2007, 09:27
achso,
also sollte Dezi1=1 sein und ich schreibe:
Dezi1=Wert.1 ist dann dir erste Stelle in der Variablen 1 usw. oder wie?
Wenn ja, kann ich dann ja zum Schluss entweder mit If-Abfragen oder Switch-Abfragen fragen, welche Zahl es ist, richtig?

MfG Killer

chr-mt
04.04.2007, 11:50
also die AND - Verknüpfung bei der If then, wird in bascom schonmal
nicht gehen, das mag das nicht.
Doch...geht. man kann auch Or usw. verknüpfen. Kein Problem.

Gruß
Christopher

Vitis
04.04.2007, 21:04
Beim Bascom kenn ich OR und AND nur als Operationen
also logische Verknüpfung von Und und Oder, aber wenns geht
solls mir recht sein.

Killer
05.04.2007, 17:41
Was hat das mit dem Wert.1, wert.2, wert.3 usw jetzt genau auf sich? was bedeutet das genau?

MfG Killer