guten abend ich muss einige taster per eingangserweeiterung über das oben genannte ic einlesen. die taster werden mit pullups auf 5v gehalten. ic ist wie folgt beschaltet: shift//load - PD3 clock - PB3 /QH - frei QH - PB2 Serial In - GND Clock INHIBIT - GND ich möchte einfach nur die acht taster einlesen , das problem ist aber dass der taster an pin H das komplette ergebnis beeinflusst. ( nicht gedrückt ergebnis 0xFF, gedrückt 0x00) hat jemand eine idee was das problem ist ?
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Funktionsweise_2 Die Behandlung deines 'Shift/Load' Pins ist falsch. Du musst einmalig am Anfang der Funktion dem IC mitteilen: Bitte jetzt den Zustand der Eingänge ins Schieberegister übernehmen. Während du dann die Bits rausschiebst, darf das nicht mehr passieren.
1 | void updateIN() |
2 | {
|
3 | // AVR an 165:
|
4 | // Bitte jetzt den Zustand der Leitungen abfragen
|
5 | cbi(PORTD,3); |
6 | |
7 | // und wieder Ruhe. Bis zur nächsten Abfrage haben dich die Eingangsleitungen
|
8 | // nicht mehr zu interessieren ...
|
9 | sbi(PORTD,3); |
10 | |
11 | // ... ich hol mir unterdessen mal die 8 Bits ab
|
12 | |
13 | for (uint8_t c=0;c<8;c++) |
14 | {
|
15 | ....
|
Übrigens sind absolute Pfade bei #include eine ziemlich schlechte Idee:
1 | #include "E:\AVR\ATmega32\Includes\BitUtilities.h" |
Mit freundlichen Grüßen, Karol Babioch
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.