Taster durch AVR ersetzen

OP #866130
Lesenswert?

Ich möchte mir bei meinem Monitor das lästige Umschalten zwischen den 
Eingängen vereinfachen (ist tief in den Menüs versteckt) und habe daher 
versucht, einen ATmega48 (lag grad rum) so zu programmieren, das er die 
Taster incl. Pullups ersetzt. Die Platine mit den Schaltern habe ich 
dazu entfernt und die Kabel direkt an den Pin des AVRs gehängt. 
Funktioniert aber leider nicht so wie erwartet. Wen ich den Pin als 
Eingang mit Pullup konfiguriere kan ich durch verbinden des Pins mit 
Masse einen Schaltvorgang im Monitor auslösen, aber wenn ich den Pin als 
Ausgang konfiguriere und HIGH - LOW - HIGH ausgeben lasse reagiert der 
Monitor nicht drauf. Ich habe verschiedene Zeiten ausprobiert aber es 
passiert einfach nix... Leider ist mein Oszi PC-basiert und ich kann es 
nicht so einfach zum Monitor tragen oder umgekehrt. Ohne dranhängenden 
Monitor verhält sich der AVR korrekt.
Hat jemand eine Ahnung was ich falsch mache?
1
DDRD = (1 << DDD6);
2
PORTD |= (1<<PD6);
3
[...]
4
for (i=0; i<anz;i++) {
5
  PORTD &= ~(1<<PD6); //low
6
    delay_ms(TLOW);  
7
  PORTD |= (1<<PD6); //high
8
    delay_ms(THIGH);
9
}
OP #866223
Lesenswert?

Monitor hat normalerweise Taster und externe Pullups auf 3,3V.
Ich will nun das der AVR die Taster ersetzt und Tastenkombinationen 
eingibt. Also Taster + Pullups weg und angeschlossen. Avr schaltet pin 
als eingang mit internem Pullup -> läuft prima wen ich den Pin per Kabel 
auf GND ziehe.
Wen der AVR aber den Pin als Ausgang schaltet (normalweiese HIGH) und 
ihn dann für verschieden lange Zeiten auf LOW schaltet reagiert der 
Monitor nicht auf diesen simulierten Klick.
Gast #866435
Lesenswert?

DDRD = (1 << DDD6);

Äh... sorry, aber was ist DDD6 ?!?

Schreib doch mal
1
DDRD = (1 << PD6);

Ausserdem: Welche Werte haben THIGH und TLOW? Dir ist bekannt, dass die 
Funktion "delay_ms" nur Werte von 0 bis 255 zulässt?

Gruß,
Magnetus
Gast #866510
Lesenswert?

Hallo,

Magnus Müller schrieb:
> Dir ist bekannt, dass die
> Funktion "delay_ms" nur Werte von 0 bis 255 zulässt?


Sorry, aber das stimmt nicht mehr.

Auszug aus der Lib:

"When the user request delay which exceed the maximum possible one, 
_delay_ms() provides a decreased resolution functionality. In this mode 
_delay_ms() will work with a resolution of 1/10 ms, providing delays up 
to 6.5535 seconds (independent from CPU frequency). "

Gruß
Udo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren