Hallo! Habe wieder einmal ein Problem. Ich möchte den gesamten PinA bereich einlesen,dieser Variiert, und möchte dann mit einem festen wert den ich in ein Register geladen habe ,vergleichen. Anhand dieses Vergleiches soll ein wert gesetzt oder nicht gesetzt werden. Habe schon alles versucht, aber der Zustand des Wertes der gesetzt werden soll bleibt immer gleich ,ob ich die A pins als Ein oder Ausgang setze, das Ergebnis ist immer das gleiche. Vielleicht hat einer ein Programmbeispiel weil er so etwas schon mal anwenden musste. Danke
Thorsten D. schrieb: > Vielleicht hat einer ein Programmbeispiel weil er so etwas schon mal > anwenden musste. Zeig deinen Code und die äussere Beschaltung des µC. Es ist viel sinnvoller dir in deinem Code/Beschaltung aufzuzeigen wo das Problem liegt, als irgendwelchen Code ins Blaue hinein für dich zu schreiben, ohne zu wissen ob es sich um ein Hardware oder Softwareproblem handelt. Ein häufiger Fehler ist es zb. dass das PORT Register anstelle des PIN Registers genommen wird. Es kann aber auch sein, dass du eigentlich Pullups an den µC Pins haben solltest und nicht hast und daher offene Eingänge hast, die jeden beliebigen Zustand annehmen können, je nachdem ob der Radio nebenan eingeschaltet ist oder nicht.
Ist soweit richtig wie du sagst. Ich habe vor den pins einen DIP-Schalter der ausgeschaltet ist. Die A Pins setze ich alle auf 1 (pins haben 5V) und mit dem DIP-Schalter ziehe ich die Pins auf 0V wenn ich einen Schalter betätige. Habe insgesammt 6 Schalter und kann demnach von pina,7 bis pina,2 einen zustand bestimmen. Ich hoffe das geht so.
Zeig doch bitte einfach mal dein (Minimal-)Programm, mit dem du Schwierigkeiten hast.
in temp1,pina ldi temp2,0b01010000 cp temp1,temp2 brsh weiter call null weiter: call eins
> cp temp1,temp2 > brsh weiter > call null > weiter: > call eins und wass passiert nach dem call null dann kommt ein call eins damit ist es immer eins
Ok habe vergessen... in temp1,pina ldi temp2,0b01010000 cp temp1,temp2 brsh weiter call null jmp zeige0 weiter: call eins zeige0: ..........
Sorry habe etwas Druck... in temp1,pina ldi temp2,0b01010000 cp temp1,temp2 brsh weiter call null jmp zeige0 weiter: call eins jmp zahl zeige0: ..........
Thorsten D. schrieb: > in temp1,pina > ldi temp2,0b01010000 > > cp temp1,temp2 > brsh weiter > call null > > weiter: > call eins Das ist also Dein ganzes Programm, dann kann es ja nicht funktionieren. Du hast 6 Taster, also 2 Pins floaten immer lustig umher und die der offenen Tasten auch. Nicht benutzte Pins ausmaskieren, benutzte an Pullups legen. Und es gibt auch einen CPI-Befehl. Peter
Also DDRA als Eingang definieren,10k Pullup Widerstände an die pins gegen Vcc und mit diesem Programm ist der Fehler Geschichte!! Programmausschnitt: ..... einser: push temp1 push temp2 in temp1,pina ldi temp2,0x0a cp temp1,temp2 brsh einser0 call null pop temp2 pop temp1 ret einser0: call eins pop temp2 pop temp1 ret ...... Danke Peter!!!!!
Thorsten D. schrieb: > Also DDRA als Eingang definieren,10k Pullup Widerstände an die pins > gegen Vcc > und mit diesem Programm ist der Fehler Geschichte!! Aber nur fast, weil Du nen Größer/Gleich-Befehl benutzt und die floatenden unbenutzten Pins die niederwertigsten sind. Richtig:
1 | in temp1,pina |
2 | andi temp1, ~0x03 ; mask pin 1,0 |
3 | cpi temp1, 0x08 ; or 0x0C ? |
4 | brsh einser0 |
Peter
Habe ich gemacht. Ich habe beim PortA generieren die Pins 0 und 1 als Ausgang gesetzt, nur die anderen benutzt, also als Eingänge gesetzt. ldi r16,0xc0 out ddra,r16 Denke das geht auch. T.
jupiter1 schrieb: > Habe ich gemacht. > > Ich habe beim PortA generieren die Pins 0 und 1 als Ausgang gesetzt, nur > die anderen benutzt, also als Eingänge gesetzt. > > ldi r16,0xc0 Das sind dann aber Pin 7, 6 > out ddra,r16 > > Denke das geht auch. Nö. Wenn die Pins immmer nur auf konstantem Pegel sind, ist das doch ziemlich witzlos. Wenn Du also die Pins benutzt, kennst Du ihren Zustand beim Vergleich nicht. Machs wie alle, maskiere. 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.