wenn du verraten würdest wie die Matrix jetzt angeschlossen ist wäre es einfacher dir zu helfen
Frage zum Code WC
-
-
Also so habe ich das inmoment
[Blockierte Grafik: http://www.dieelektronikerseite.de/Pics/uC-Ecke/Lections/Matrixanzeigen%20-%20LEDs%20in%20Reih%20und%20Glied%20S03.GIF]
Würde gern dazu den schieberigister 74HC595 benutzen.
Also noch mal die daten:
1.) 2x Matrix Anzeigen
2.) 1x Schalter um (WC oder X ) Anzuzeigen
3.) ATmega 8 oder auch Gern ATtiny2313so ich hoffe die angaben reichen bis dann und Gruss Thorsten Sch.
-
Dann mach doch an Port B0 bis B4 (Pin 14-18) nochmal das gleiche wie an Port C0 bis C4 (Pin 23-27) für die 2. Matrix und verdrahte die Zeilen miteinander.
Warum ein Schieberegister wenn du es nicht brauchst.Code
Alles anzeigen$regfile "m8def.dat" $crystal = 1000000 Config Portd = Output Config Portc = Output Config Portb = Output Do Portd = 1 : Portc = &B00010001 : Portb = &B00011111: Waitms 1 Portd = 2 : Portc = &B00010001 : Portb = &B00010001: Waitms 1 Portd = 4 : Portc = &B00010001 : Portb = &B00010000: Waitms 1 Portd = 8 : Portc = &B00010001 : Portb = &B00010000: Waitms 1 Portd = 16 : Portc = &B00010101 : Portb = &B00010000: Waitms 1 Portd = 32 : Portc = &B00010101 : Portb = &B00010001: Waitms 1 Portd = 64 : Portc = &B00011011 : Portb = &B00011111: Waitms 1 Loop
Die Daten die hinter "Portb =" stehen musst du noch anpassen, dazu bin ich jetzt zu faul...
Und für den Schalter musst du nochmal ein bisschen lesen.
Tip: IF/THEN abfrage und dann musst du noch einen Pin für den Eingang freischaufeln. (config Pin.X=Input)Edit: die Widerstände solltest du bei deiner Programmierung aber zwischen Matrix und Collektor vom Transistor einbauen.
Edit2: Code debugt, jetzt sollte er auch schon sowas ähnliches wi WC anzeigen.
-
hallo Forum Nutzer und Bastler
so bin jetzt weiter hab es so gemacht wie es ( snowfly ) mir geschrieben hat das funktioniert gut so nu will ich es per schalter schalten hab was da mal vorbereitet
Code
Alles anzeigen$regfile "m8def.dat" $crystal = 1000000 Config Portd.0.1.2.3.4.5.6 = Output Config Portc.0.1.2.3.4 = Output Config Portb.0.1.2.3.4.5.6 = Output Config Portd.7 = Input Portd.7 = 1 Dim Dis(2) As Byte Dim Cnt As Byte Dis(1)portc = 1 : Portd = &B00010000 : Portb = &B00000100 : Waitms 1 Dis(1)portc = 2 : Portd = &B00100000 : Portb = &B00000010 : Waitms 1 Dis(1)portc = 4 : Portd = &B01000000 : Portb = &B00000001 : Waitms 1 Dis(1)portc = 8 : Portd = &B00100000 : Portb = &B00000010 : Waitms 1 Dis(1)portc = 16 : Portd = &B00010000 : Portb = &B00000100 : Waitms 1 Dis(2)portc = 1 : Portd = &B01111110 : Portb = &B00100010 : Waitms 1 Dis(2)portc = 2 : Portd = &B00000001 : Portb = &B01000001 : Waitms 1 Dis(2)portc = 4 : Portd = &B00001110 : Portb = &B01000001 : Waitms 1 Dis(2)portc = 8 : Portd = &B00000001 : Portb = &B01000001 : Waitms 1 Dis(2)portc = 16 : Portd = &B01111110 : Portb = &B00111110 : Waitms 1 Cnt = 2 : Portd = Portb = Dis(cnt) Do If Pind.7 = 0 Then Portd = Portb = Dis(cnt) : Cnt = Cnt + 1 If Cnt = 2 Then Cnt = 4 End If Loop
so aber leider hänge ich da örgendwo fest brauch bitte Eure Hilfe bitte könnt ihr mir helfen.......
hier noch ein bilder von der Anzeige ( schaltung Folgt )
( Hier der Nachtrag von der schaltung )
da fehlt nur noch der schalter den ich auf der schaltung inmoment noch nicht habe der aber in TXT eingefügt ist
Der Code ( bascom )
ATmega8 Multi _ Würfel - Matrix - Ping Pong.zip
Bis dann und Schnelle Antwort Gruss Thorsten Sch. -
Bei der Schaltung fehlen noch die vorwiderstände für die Leds.
Deinen Code hab ich mir mal angeschaut, aber sorry das ist zu hoch für mich.
Ich verstehe nicht was der überhaupt machen soll nur das der in der Do-Loop schleife
auf nen Tastendruck wartet, kurz was macht und dann wieder wartet. -
ja danke für den tipp wahr mir aber klar sollte schnell gehen..... aber verleicht hat noch jemand ein anderen tipp
gruss Thorsten Sch. -
Hi Forum Nutzer und bastler
nu hab ich die Anzeige soweit am laufen jetzt hab ich das proplem per schalter ( INT0 ) den text zu ändern.
hier mal der codeCode
Alles anzeigen'--------------------------------------------- 'Matrix Anzeige ( WC=FREI oder X=Besetzt ) 'Schalter Eingang ( Taster ) an PIN16 PD2 'Erstellt von Thorsten Sch. V.001 'Erstellt am: 30.10.2010 - Uhrzeit: 23:43:27 '--------------------------------------------- $regfile "m32def.dat" ' ATmega32 $crystal = 4000000 ' 4Mhz Config Porta = Output ' Dis.1_Reihe R1-7 Config Portb = Output ' dis.2_Reihe R1-R7 Config Portc = Output ' Steuert die Transistoren An C1-C5 Do Portc = 1 : Portb = &B01111110 : Porta = &B00100010 : Waitms 1 Portc = 2 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 4 : Portb = &B00001110 : Porta = &B01000001 : Waitms 1 Portc = 8 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 16 : Portb = &B01111110 : Porta = &B00111110 : Waitms 1 Loop ' Kreutz auf beiden anzeigen 'Portc = 1 : Porta = &B00000000 : Portb = &B00001000 : Waitms 1 'Portc = 2 : Porta = &B01000001 : Portb = &B00010100 : Waitms 1 'Portc = 4 : Porta = &B00100010 : Portb = &B00100010 : Waitms 1 'Portc = 8 : Porta = &B00010100 : Portb = &B01000001 : Waitms 1 'Portc = 16 : Porta = &B00001000 : Portb = &B00000000 : Waitms 1
so wie oder was muss ich da eingeben hab es soweit mal was versucht
HIERCode
Alles anzeigen'--------------------------------------------- 'Matrix Anzeige ( WC=FREI oder X=Besetzt ) 'Schalter Eingang ( Taster ) an PIN16 PD2 'Erstellt von Thorsten Sch. V.001 'Erstellt am: 30.10.2010 - Uhrzeit: 23:43:27 '--------------------------------------------- $regfile "m32def.dat" ' ATmega32 $crystal = 4000000 ' 4Mhz Config Porta = Output ' Dis.1_Reihe R1-7 Config Portb = Output ' dis.2_Reihe R1-R7 Config Portc = Output ' Steuert die Transistoren An C1-C5 Declare Sub Wc Declare Sub X Declare Sub Badewanne Dim I As Byte On Int0 Taster Config Int0 = Falling Enable Int0 Enable Interrupts I = 0 Do Select Case I Case 0 : Gosub Wc Case 1 : Gosub X Case 2 : Gosub Badewanne End Select Waitms 200 Loop Sub Wc Portc = 1 : Portb = &B01111110 : Porta = &B00100010 : Waitms 1 Portc = 2 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 4 : Portb = &B00001110 : Porta = &B01000001 : Waitms 1 Portc = 8 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 16 : Portb = &B01111110 : Porta = &B00111110 : Waitms 1 End Sub 'Kreutz auf beiden anzeigen Sub X Portc = 1 : Porta = &B00000000 : Portb = &B00001000 : Waitms 1 Portc = 2 : Porta = &B01000001 : Portb = &B00010100 : Waitms 1 Portc = 4 : Porta = &B00100010 : Portb = &B00100010 : Waitms 1 Portc = 8 : Porta = &B00010100 : Portb = &B01000001 : Waitms 1 Portc = 16 : Porta = &B00001000 : Portb = &B00000000 : Waitms 1 End Sub Sub Badewanne Portc = 1 : Porta = &B00000000 : Portb = &B00001000 : Waitms 1 Portc = 2 : Porta = &B01000001 : Portb = &B00010100 : Waitms 1 Portc = 4 : Porta = &B00100010 : Portb = &B00100010 : Waitms 1 Portc = 8 : Porta = &B00010100 : Portb = &B01000001 : Waitms 1 Portc = 16 : Porta = &B00001000 : Portb = &B00000000 : Waitms 1 End Sub Taster: Waitms 100 I = I + 0 If I = 5 Then I = 0 Return End
mach ich da was falsch wenn ja, bitte ich um euhre hilfe BITTE
HIER die Schaltung NochmalBis dann ich hoffe auf Viele Tipps
Gruss Thorsten Sch. -
Hallo,
Ich hätte nicht gedacht das du so harnäckig bist. Respekt.
Versuchs mal so:
Code
Alles anzeigen'--------------------------------------------- 'Matrix Anzeige ( WC=FREI oder X=Besetzt ) 'Schalter Eingang ( Taster ) an PIN16 PD2 'Erstellt von Thorsten Sch. V.001 'Erstellt am: 30.10.2010 - Uhrzeit: 23:43:27 '--------------------------------------------- $regfile "m32def.dat" ' ATmega32 $crystal = 4000000 ' 4Mhz Config Porta = Output ' Dis.1_Reihe R1-7 Config Portb = Output ' dis.2_Reihe R1-R7 Config Portc = Output ' Steuert die Transistoren An C1-C5 config portd.2 = input 'anschluss schalter portd.2=1 'internen PullUp einschalten Declare Sub Wc Declare Sub X Declare Sub Badewanne Dim I As Byte Do if portd.2 = 0 then gosub wc if portd.2 =1 then gosub x Loop Sub Wc Portc = 1 : Portb = &B01111110 : Porta = &B00100010 : Waitms 1 Portc = 2 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 4 : Portb = &B00001110 : Porta = &B01000001 : Waitms 1 Portc = 8 : Portb = &B00000001 : Porta = &B01000001 : Waitms 1 Portc = 16 : Portb = &B01111110 : Porta = &B00111110 : Waitms 1 End Sub 'Kreutz auf beiden anzeigen Sub X Portc = 1 : Porta = &B00000000 : Portb = &B00001000 : Waitms 1 Portc = 2 : Porta = &B01000001 : Portb = &B00010100 : Waitms 1 Portc = 4 : Porta = &B00100010 : Portb = &B00100010 : Waitms 1 Portc = 8 : Porta = &B00010100 : Portb = &B01000001 : Waitms 1 Portc = 16 : Porta = &B00001000 : Portb = &B00000000 : Waitms 1 End Sub Sub Badewanne Portc = 1 : Porta = &B00000000 : Portb = &B00001000 : Waitms 1 Portc = 2 : Porta = &B01000001 : Portb = &B00010100 : Waitms 1 Portc = 4 : Porta = &B00100010 : Portb = &B00100010 : Waitms 1 Portc = 8 : Porta = &B00010100 : Portb = &B01000001 : Waitms 1 Portc = 16 : Porta = &B00001000 : Portb = &B00000000 : Waitms 1 End Sub Taster: Waitms 100 I = I + 0 If I = 5 Then I = 0 Return End
Ich habs zwar nicht ausprobiert, aber sollte so gehen.
Badewanne darfst du noch selbst einbauen, vor allem weil du nicht verrätst wie dein schalter angeschlossen istEDIT: aber ein paar Sachen sind schon komisch....
was z.B. soll "I = I + 0"?
und muss am ende der sub nicht ein return? -
Hi Thorsten
Bin auch gerade am erlernen von Bascom, und versuche es umzusetzten in eine 8x32 LED Matrix.
Was mir bei deinem 2ten Code auffällt ist:
Du hast bei "Select Case I" 3Möglichkeiten(0-2), willst aber von 0-4 zählen
If I = 5 Then I = 0 ,hier sollte es heißen "If I=3 Then I=0"Wenn der Taster gedrückt wird wird gezählt:
I = I + 0 , d.H. der Wert ändert sich sowieso nicht und es kann nur "WC" aufgerufen werden, sollte eher heißen "I=I+1" oder "incr I"Warum wird im Hauptprogramm noch 200ms gewartet?, das bringt doch nur ein Flackern, und die letzte Spalte(Portc.4) leuchtet diese 200ms alleine nach.
Edit: jetzt hab ich Snowfly übersehen.
so geht's auch aber da hat er nur 2 Möglichkeiten zur Auswahl -
Ahhh.. jetzt hab ich den Code verstanden...
ja das Wait in der Do-Loop schleife muss raus.
mit dem Rest hat Jony wohl auch recht, das mit dem I=I+0 ist mir ja auch schon aufgefallenAber eins hab ich noch: am End der ISR (Taster:) muss das InterruptPending Flag gelöscht weden, sonst wird der Interrupt immer 2 mal aufgerufen.
naja durch die ungerade Anzahl an möglichkeiten fällts vielleicht auch nicht auf, nur die Richtung stimmt nicht.
Und Warten in der ISR ist vielleicht auch nicht so toll wen nebenher multiplexing läuft. zumindest sollte man alle Leds ausschalten wähend dem Warten. -
Und Warten in der ISR ist vielleicht auch nicht so toll wen nebenher multiplexing läuft. zumindest sollte man alle Leds ausschalten wähend dem Warten.
Ich bin mir jetzt nicht zu 100% sicher, aber das waitms 100 ist hier für die Tastenentprellung zuständig. d.H. dass er nicht gleich 2-3mal dasselbe aufruft.
aber 1x100ms stören eh nicht so stark, ansonsten kann er ja ein "Portc = 0" einfügen -
Warum fragt ihr den Taster nicht einfach direkt mit "Debounce" ab? Dann brauch man sich ums Entprellen auch nimmer kümmern...
-
Hi Snowflo und forum nutzer und bastler
hab Hier mal die aktuelle schaltung hier rein gesteztzZitatvor allem weil du nicht verrätst wie dein schalter angeschlossen ist
da ist der schalter anschluss zu sehen....
hab mal den code propiert leider tut sich da nichts oder hab ich da was falsch gemacht hab hin in bascom reingesetzt gespeichert in bascom dan complitiern lassen in HEX leider ohne erfollg
Bitte um Rat dankeGruss Thorsten Sch.
-
Hi Forum Nutzer und bastler
kann jetzt einer mit der schaltung was anfangen???
Bitte Um rat oder tipps oder auch hilfe wird gern angenommen
Gruss Thorsten Sch. -
kan mir nu jemand mir helfen oder will darauf keiner antworten........
Gruss Thorsten Sch.
freue mich auf antworten
-
Sind wohl gerade alle Glaskugeln zur Reperatur.
Wenn du die Rechtschreibfehler nicht auch noch absichtlich einbauen würdest und uns verrätst was genau dein Problem ist dann würden dir bestimmt mehr Leute Antworten.
Aber so drängt sich der Verdacht auf dass dich eh gleich die Jungs mit den weissen Schuhen holen. -
Hm, das finde ich nun ein bisschen unfair, da er schon paar mal hier gesagt hat, dass er Legastheniker ist, steht auch in seiner Signatur...
Im Prinzip ist der Code aus Post 27 (der untere) schon richtig, mit ein paar kleinen Änderungen:
- das Waitms 200 in der Main-Loop muss raus, wurde ja schon gesagt
- in Zeile 68 muss es heissen I=I+1 (weil bei +0 ändert sich ja nix, also kannst Du drücken wie Du willst ohne Ergebnis)
- in Zeile 68 dann "If I = 3 Then I = 0", weil es ja nur von 0 bis 2 geht
- und man kann natürlich am Anfang der Taster-Sub (also vor dem Warten) die LEDs ausschalten, damit keine Reihe aufblitztDas alles hat Jony Walker ja schon gesagt - Also probiere mal, das umzusetzen, und poste dann ggfs. den Code neu, damit man sich den anschauen kann - der Schaltplan stimmt soweit, wenn ich das richtig sehe...
Snowfly: bei Deiner SW geht das etwas anders, da zeigt er "WC" oder "X", je nach dem, ob der Taster gedrückt ist oder nicht - würde Sinn machen, wenn man den z.B. an das Schloss anbringt, so dass beim Zusperren automatisch "X" kommt...
aber hier soll es ja so sein, dass die Anzeige bei jedem Tastendruck eins weiter wechselt...
-
Hmm, ich wollte nicht unfair sein, sieht für mich aber wirklich nach absicht aus(meine Rechtschreibung ist ja auch nicht sonderlich)
Falls ich unrecht habe nehme ich alles zurück und behaupte das Gegenteil.
Und wie oben schon geschrieben: Respekt für die hartnäckigkeit.Das mit dem Code war dachte ich schon geklärt, ich habs nur anfangs nicht verstanden.
Momentanes Problem ist wohl das irgendwas mit flashen nicht geht aber mit den Infos ist es echt schwer irgenwelche Tips zu geben.
(ausser die aus dem BOfH Kalender *g*) -
hallo bastler und forum nutzer sowie (snowflo & pesi)
also die anzeige soll per tür kontakt geschalten werden das heist so:
1.) wenn tür nicht zu ist also spallt offen dann soll da ( wc ) anzeigen ( frei ).....
2.) wenn tür zu dann soll auf der beiden anzeigen ein ( X ) zu sehen sein was ( blinkt ) das kreutz...
3.) sollte die tür länger wie beispiel ( 8-10min. ) zu sein die tür dann kommt irgendwelche andere symbole wie ( badewanne ) oder was anderes....das währe inmoment das wichstige für mich wenn das irgendwie hinhaut mit den code aber irgendwie haut das noch nicht so hin darum bitte ich eure hilfe SNOWFLY und PESI und andere forum nutzer & bastler
Bitte um hilfe
Gruss Thorsten Sch. -
Wo wir wieder bei den nicht vorhandenen Glaskugeln sind.
Was ist gerade das Problem?
Die einzig richtige Angabe was nicht funktioniert ist, dass sich ein Code nicht in eine HEX Datei umwandeln lässt.Zitathab mal den code propiert leider tut sich da nichts oder hab ich da was falsch gemacht hab hin in bascom reingesetzt gespeichert in bascom dan complitiern lassen in HEX leider ohne erfollg
welcher Code ist da gemeint?
Der von Snowfly ist wahrscheinlich nicht gemeint, denn der lässt sich bei mir ohne Probleme umwandelnIch fange mal an zu raten was mir komisch vorkommt:
Welcher µC verwendest du?
laut deinen geposteten Codes wurden bisher bereits 3 verschiedene verwendet:
ein Attiny 2313
ein Atmega8 (da wurde auch bereits ein W angezeigt)
und jetzt ein Atmega23.