Hi Experten, ich habe ein kleineres Projekt mit einem ATTiny15L vor und benötige ein bischen Hilfe im Hardware Design. Also am ATTiny15 wird: - PB5/RESET per PullUp und eventuell als Input für eine Zweidraht Kommunikation beschaltet. - PB4 und PB3 jeweils an eine LED. - PB1/OC1A als PWM Ausgang für IR-LED - PB0 für Zweidrahtkommunikation - PB2 INT0 und ADC1 für Tastenfeld. Gerade der letzte Punkt bezieht sich auf meine eigentliche Frage. Ich benötige nämlich 4 Taster, den Wakeup Interrupt Int0 um aus dem Power Down Modus zu kommen und den ADC1 um die 4 Taster auswerten zu können. Ich dachte mir das man ein Widerstandsnetzwerk benutzt um verschiedene Spannungen je nach gedrücktem Taster an ADC1 anzulegen. Allerdings weiß ich nicht ob das funktiniert und wie in etwa so was zu beschalten und zu berechnen wäre. Ich benötige aber den INT0 ebenfalls um aus dem Power Down Sleep Mode rauszukommen. Der Programmfluß sähe so aus: Mainloop: - aktiviere INT0 an PB2 - Sleep per Power Down - wird eine der 4 tasten gedrückt soll INT0 ausgelösst werden - nun aktiviere ADC1 an PB2 - lese Tasten aus über ADC - sende IR über PB1 PWM - LED's an PB3/PB4 blinken abhängig nach Status - springe zu MainLoop Würde sowas sicher funktionieren ? und wie müsste man PB2 beschalten ? Gruß Hagen
GND | R5 | AD O------O-----O-----O-----O | | | | R1 R2 R3 R4 | | | | /INT O------O-----O-----O-----| Normalbetrieb: AD = Input, misst Spg. und wertet Tastendrücke aus /INT = Output, auf High geschaltet Powerdown/Wakeup-Betrieb: AD = Output, auf Low geschaltet /INT = Input mit internem Pullup, als Wakeup-IR R1 = 2*R2 = 4*R3 = 8*R4 Einer von R1 bis R4 kann theoretisch weggelassen werden, allerdings ist dann ein Kurzschluss möglich (beide Pins als Output). Stefan
Danke Stefan, aber wenn ich das richtig sehe benötige ich dann 2 Pins am AVR. Beim ATTiny15 ist am Pin PB2 eben der Int0 und der ADC1. Ich suche nach einer Verschaltung die somit die Taster über Widerstände an diesen einen Pin legt. Je nach Modus sollte nun Int0 für den WakeUp oder aber ADC1 zum Sampling benutzbar sein. Geht sowas überhaupt ? Ich dachte an: <pre> Vcc | 0---0---0---0 | | | | T1 T2 T3 T4 | | | | R1 R2 R3 R4 | | | | PB2 0---0---0---0---0 | Rx | GND oder Vcc | 0------0------0------0 | | | | T1 T2 T3 T4 | | | | PB2 0---0--R1--0--R2--0--R3--0 | Rx | GND </pre> Gruß hagen
Oh, sorry, das habe ich nicht gewusst. Daeine untere Schaltung funktioniert nicht, das schaltet jeder Taster VCC an PB2 durch, nix mit analog. Die obere ist vom Tastermessen her ok. Allerdings geht das Wake-Up sicher nicht, jedenfalls nicht mit allen Tasten. Willst Du mit allen Tasten Wake-Up machen können? Müssen Mehrfach-Tastendrücke erkannt/ausgewertet werden? Wenn beide Antworten NEIN sind, dann kannst Du T1 als Wakeup benutzen und R1 weglassen (-> 0 Ohm). Reagiert der INT0 auf Low->High-Flanke (beim Aufwachen)? Wenn nicht, musst Du die Logik umkehren, Taster an GND, Rx an VCC. Stefan
Hi Stefan > Willst Du mit allen Tasten Wake-Up machen können? Ja. > Müssen Mehrfach-Tastendrücke erkannt/ausgewertet werden? Nein. Zumindestens nicht parallele Mehrfachtastendrücke zur gleichen Zeit. Es wäre eventuell gut erkennen zu können das nur eine Taste zur gleichen Zeit gedrückt wird, allerdings nicht unbedingt nötig. Deshalb dachte ich auch an ein Widerstandsnetzwerk. > Reagiert der INT0 auf Low->High-Flanke (beim Aufwachen)? Keine Ahnung, das kann man doch einstellen dachte ich ? Zur Erklärung, ich bin neu auf diesem Gebiet. Habe zwar 15 Jahre professionelle Programmiererfahrung und vor 18 Jahren mal Elektromechaniker und EDV Kaufman gelernt, aber trotzdem bin ich noch ziemlich unsicher. Wenn ich in meinem zweiten Beispiel ebenfalls Gnd und Vcc vertausche ? Die taster sind normalerweise offen, somit liegen am Pin die Widerstände R1+R2+R3+Rx an Vcc als Pullup. Schaltet T1 durch wird der Pin gegen Masse gezogen = 0 Volt. Beim T1 jeweils R1 nach Masse und R2+R3+Rx an Vcc, usw. usw. Oder denke ich in die falsche Richtung ? Gruß Hagen
Dann muss Dein 2.Bsp. so aussehen, dann geht es: Vcc | 0------0------0------0 | | | | T1 T2 T3 T4 | | | | PB2 0---0--R1--0--R2--0--R3--0 | Rx | GND >> Reagiert der INT0 auf Low->High-Flanke (beim Aufwachen)? > Keine Ahnung, das kann man doch einstellen dachte ich ? Habe da noch weniger Ahnung ;-)) Den Tiny kenne ich nicht und was man da alles einstellen kann, wollte nur, dass Du darauf Acht gibst. Mit dem Wakeup - das ist ein Problem, da solltest Du ja durch den Taster ein sauberes Low-oder Hi-Signal bekommen. Mal überlegen ... Stefan
Ein astreine Lösung fällt mir nicht ein. Aber wie wärs denn damit: Vcc | 0------------0------0------0 | | | | T1 T2 T3 T4 | | | | PB2 0---0-----O--R1--0--R2--0--R3--0 | | Rx Ry | | GND D V | LedPort O-----O-----------|<|------ VCC Ry = R1 = R2 = R3 = 4k7 Rx = 100k Zum Tasterlesen musst Du LedPort kurz auf Low schalten. Nachteile: Die LED wird dadurch ein kleines bischen glimmen (je kürzer und seltener die Tastenabfrage, desto weniger). Durch die Diode, Rx + Ry fliesst immer ein kleiner Strom, bei VCC = 5V ca. 30uA. Der entfällt, wenn die Diode zusätlich eingebaut wird. Wenn nicht beide LEDs gleichzeitig an sein müssen, fallen mir auch noch andere Sachen ein :-)) Stefan
Als LED's wollte ich eine SMD Duo Rot/Grün benutzen, d.h. beide müssen unabhänig schaltbar sein, jeweils Off,Red,Green,Red+Green. Somit kann man da garnichts machen. PB5/RESET wollte ich immer als Input belassen und per PullUp auf Vcc ziehen. PB0 ebenfalls als Input. Beide sollten als getacktete 2Wire Schnittstelle bestehen bleiben und deshalb nicht weiter benutzt werden. PB1 wie gesagt steuert per PWM die IR-LED, könnte eventuell als Input zur Verfügung stehen, per Pin Change IRQ ?? D.h. ich könnte PB1 auf Eingang schalten und damit die Taster detektieren. An PB1 wollte ich per Treibertransistor die IR-LED steuern. Ich glaube aber nicht das ich diese Pin dafür benutzen kann. Ich werde jetzt erstmal meine Lieferungen abwarten und dann selber praktisch testen. Gruß Hagen
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.