-         

Ergebnis 1 bis 7 von 7

Thema: PollSwitch() und Pegel an ATmega Pin 5

  1. #1
    Neuer Benutzer Öfters hier Avatar von Swordfish6
    Registriert seit
    01.11.2012
    Ort
    Nürnberg
    Alter
    38
    Beiträge
    10

    PollSwitch() und Pegel an ATmega Pin 5

    Anzeige

    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:

    Code:
    #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

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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    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.
    Geändert von HeXPloreR (03.11.2012 um 10:17 Uhr)
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    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
    Tiny ASURO Library: Thread und sf.net Seite

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Vielleicht hilft dir das weiter:

    http://www.roboternetz.de/community/...l=1#post483740

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Diese erste 2 Powerpoint Präsentationen von Arexx-Henk erklären das Taster Prozess auch ganz deutlich.

    http://home.kpn.nl/h.van.winkoop/Asu...uInfPagFrm.htm

  6. #6
    Neuer Benutzer Öfters hier Avatar von Swordfish6
    Registriert seit
    01.11.2012
    Ort
    Nürnberg
    Alter
    38
    Beiträge
    10
    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
    Geändert von Swordfish6 (03.11.2012 um 14:12 Uhr)

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Swordfish6 Beitrag anzeigen
    ... 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.

Ähnliche Themen

  1. Probleme mit PollSwitch
    Von Herbert A. im Forum Asuro
    Antworten: 13
    Letzter Beitrag: 01.03.2011, 18:59
  2. Atmega pegel mit Interrups oder durch Pollen Analysieren?
    Von MrTaco im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 07.07.2009, 18:17
  3. Probleme mit PollSwitch
    Von reini89 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 24.06.2008, 14:09
  4. pollSwitch
    Von The-BooN- im Forum Asuro
    Antworten: 11
    Letzter Beitrag: 01.12.2006, 10:41
  5. zulässige Last an ATMega bei High-Pegel
    Von Tommi im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 10.06.2006, 11:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •