Forum: Mikrocontroller und Digitale Elektronik need Help, mit Hardwaredesign


von Hagen (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.