PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PollSwitch() und Pegel an ATmega Pin 5



Swordfish6
03.11.2012, 09:46
Hallo Forum,

ich hab noch mal ein Verständnisproblem, diesmal betrifft es die PollSwitch()-Funktion bzw. die el. Zweige zwischen Pin 5, Pin 27 und R23.

Zunächst: ASURO funktioniert, Selftest war erfolgreich (natürlich auch der Test für Taster K1-K6). Zudem hab ich die Zweige vorsichtshalber (bei gezogenem IC) noch mit einem Ohm-Meter überprüft und dabei keine Auffälligkeiten festgestellt.

Da ich mich für den AD-Wandler ein wenig näher interessierte schrieb ich ein simples Programm:



#include "asuro.h"

int main(void)
{
// Variablendeklaration
unsigned char taste;
int zaehler;

// µC wird in Grundzustand gebracht
Init();

StatusLED(YELLOW);

//Wartezeit
for (zaehler=0; zaehler<3000; zaehler++)
{
Sleep (216) ;
}

StatusLED(RED);
taste = PollSwitch();

while(1);
return 0;
}


Meine Erwartung war nun, dass Pin 5 zunächst Low-Pegel führt, bei Ausführung der PollSwitch()-Funktion (nach ein paar Sekunden) High-Pegel (wohl mit einem einfachen Multimeter nicht messbar) und dann wieder Low-Pegel. So steht es ja nach meinem Verständnis auch im Code von asuro.c



unsigned char PollSwitch (void)
{
(...)
DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
(...)
SWITCH_OFF;
(...)
}


Der erste Befehl erzeugt die Bitfolge 11111100 im "Port D Data Direction Register" (DDRD), legt also die Richtung des Datenaustausches fest. Passt also. Mit dem 2. Befehl liegt an Pin 5 High-Pegel (via PORTD-Register).

Nun das Merkwürdige:

Messe ich mit einem Voltmeter zwischen Pin 5 (PD3) und Pin 8 (GND) so muss ich feststellen dass zuanfangs High-Pegel anliegt! Drücke ich dabei einen der Taster so stürzt die Spannung ab in den Keller, nahe 0 V. Dabei ist es egal welcher Taster betätigt wird, das Ergebnis ist bis auf wenige mV gleich.
Nach der von mir eingestellten Wartezeit, also bei Aufruf der PollSwitch()-Funktion, geht die Spannung auf 0 V - das kann ich mir durch den SWITCH_OFF Befehl erklären.

Ich grüble und suche jetzt schon zwei Tage und bin noch noch nicht weitergekommen. Evtl. habt Ihr ja ein paar Tipps für mich :)

Gruß Swordfish

HeXPloreR
03.11.2012, 10:08
Hallo,

ich kenne nun den Asuro nicht, aber wenn die Pollswitch Funktion die Pins als OUTput setzt und dann kommt Switch_on - welche die Ausgänge auf High (5V) legt, und dann switch_off alle wieder aus (0V) macht. Dann erscheint es mir korrekt zu arbeiten.
Das Du mit dem ADC arbeiten möchtest weiß der µC möglicherweise nicht bzw bei einer einfachen Taster abfrage gibt es eben nur AN oder AUS.

Vielleicht gibt es eine andere Funktion die nicht Switsches ( Schalter oder Taster) heißt, die deinen Vorstellungen näher kommt?

Du könntest sonst ja auch versuchen die Pollswitch Funktion umzubauen ( da rate ich aber eher von ab, weil dann mögliche andere Programmteile nicht mehr richtig arbeiten). Oder auch die Switch_on und _off Funktion direkt zu nutzen, wenn sie denn das können was Du erwartest.

markusj
03.11.2012, 10:24
Du misst an der falschen Stelle. Die Taster werden analog ausgewertet, das Signal dazu liegt an PC4 (Pin 27) an. PD3 wird verwendet um durch Tastendrücke einen Interrupt auslösen zu können, hierzu wird der Pin als Eingang konfiguriert und INT1 freigeschaltet. Zum ermitteln der gedrückten Taster wird PD3 auf Ausgang, High geschaltet, die Widerstände bilden dann einen variablen Spannungsteiler. Die gemessene Spannung kann umgerechnet werden in die gedrückten Taster.

mfG
Markus

radbruch
03.11.2012, 11:24
Hallo

Vielleicht hilft dir das weiter:

https://www.roboternetz.de/community/threads/50158-T9-glimmt-nur-und-Schalter-funktionieren-nicht-richtig?p=483740&viewfull=1#post483740

Gruß

mic

Valen
03.11.2012, 13:30
Diese erste 2 Powerpoint Präsentationen von Arexx-Henk erklären das Taster Prozess auch ganz deutlich.

http://home.kpn.nl/h.van.winkoop/Asuro/Info/AsuInfPagFrm.htm

Swordfish6
03.11.2012, 13:59
Okay vielen Dank! Die Versorgungsspannung an R23 war mir entgangen. Dachte auch die Interrupt-Funktionalität wird garnicht verwendet... tja so kann man sich täuschen.

Grüße Swordfish

Valen
03.11.2012, 14:52
... Dachte auch die Interrupt-Funktionalität wird garnicht verwendet... Das wird es auch kaum. Weil das für die meiste Asuro Betrieber zu Komplex ist. Und in die Originale Lib asuro.c ist den Code für den INT1 Interuptroutine nicht enthalten. Nur das Einstellen und Abstellen der Taster-interupt ist vorsehen. Aber nicht was er tun soll wann einer Interrupt passiert. Das muss man selbst schreiben.

Die erweiterte lib, und auch Markusj's TinyAsuro Lib, setzten ein Globale Variabele auf 1 wann ein Taster eindruck mit Interupt1 bemerkt wird. Das kann dein Programm viel schneller testen als die ganze PollSwitch Funktion aus zu führen.