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
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