switches.c-Dateireferenz

Funktionen zum lesen der Taster und um den 'Interrupt-Betrieb' ein-
und auszuschalten. Im 'Interrupt-Betrieb' wird die globale Variable
switched gesetzt beim betaetigen irgendeines Tasters. Mehr ...

#include "asuro.h"
#include "myasuro.h"

gehe zum Quellcode dieser Datei

Funktionen

unsigned char PollSwitch (void)
 Tastsensor Abfrage im 'Polling-Betrieb'.
void StartSwitch (void)
 'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten.
void StopSwitch (void)
 'Interrupt-Betrieb' zur Tastsensor Abfrage anhalten.


Ausführliche Beschreibung

Funktionen zum lesen der Taster und um den 'Interrupt-Betrieb' ein-
und auszuschalten. Im 'Interrupt-Betrieb' wird die globale Variable
switched gesetzt beim betaetigen irgendeines Tasters.

Siehe auch:
Define fuer die Auswahl des ADC-Kanals in asuro.h
SWITCH
Version:
V--- - 10.11.2003 - Jan Grewe - DLR
Original Version von der ASURO CD

V--- - bis zum 07.01.2007 -
Bitte in Datei CHANGELOG nachsehen.

V001 - 13.01.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Zerlegte Sourcen in einzelne Dateien fuer eine echte Library.

V002 - 22.01.2007 - Sternthaler
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)

V003 - 18.02.2007 - Sternthaler
+++ StartSwitch() Korrektur im Code-Beispiel

V004 - 20.02.2007 - m.a.r.v.i.n
Korrekturfaktur aus myasuro.h verwenden

Definiert in Datei switches.c.


Dokumentation der Funktionen

unsigned char PollSwitch ( void   ) 

Tastsensor Abfrage im 'Polling-Betrieb'.

Parameter:
keine 
Rückgabe:
Tastenwert bitorientiert, K1 = Bit5, K2 = Bit4, K3 = Bit3, K4 = Bit2, K5 = Bit1, K6 = Bit0
Siehe auch:
Die globale Variable autoencode wird temporaer auf FALSE gesetzt und am Ende
der Funktion mit dem alten Wert restauriert.
Hinweis:
In dieser Funktion sind 2 Sleep() Aufrufe vorhanden. Sie werden benoetigt
damit der Kondensator an der AD-Wandlereinheit genuegend Zeit hat geladen
zu werden.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  uint8_t t1, t2;
  unsigned char text [16];

  while (1)
  {
    t1 = PollSwitch ();
    t2 = PollSwitch ();
    // 2x PollSwitch aufrufen und beide Rueckgabewerte auf Gleichheit ueberpruefen
    if (t1 && t2 && t1 == t2)           // irgendeine Taste gedrueckt 
    {
      itoa (t1, text, 10);              // Tastenwert senden 
      SerPrint (text);
      SerPrint ("\r\n");                // Zeilenvorschub 
    }
    Msleep (500);                       // 0,5 sek warten
  }

Definiert in Zeile 83 der Datei switches.c.

00084 {
00085   unsigned int i;
00086   int ec_bak = autoencode;              // Sichert aktuellen Zustand
00087 
00088   /*
00089      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00090   */
00091   autoencode = FALSE;
00092 
00093   DDRD |= SWITCHES;                     // Port-Bit SWITCHES als Output
00094   SWITCH_ON;                            // Port-Bit auf HIGH zur Messung
00095   ADMUX = (1 << REFS0) | SWITCH;        // AVCC reference with external capacitor
00096   Sleep (10);
00097 
00098   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00099   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00100     ;
00101   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00102 
00103   i = ADCL + (ADCH << 8);               // Ergebnis als 16-Bit-Wert
00104 
00105   SWITCH_OFF;                           // Port-Bit auf LOW
00106   Sleep (5);
00107 
00108   /*
00109      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00110   */
00111   autoencode = ec_bak;
00112 
00113   /*
00114     Die Original Umrechenfunktion von Jan Grewe - DLR wurder ersetzt durch
00115     eine Rechnung ohne FLOAT-Berechnungen.
00116   return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));
00117 
00118     Wert 61L evtl. anpasssen, falls fuer K1 falsche Werte zurueckgegebn werden.
00119   */
00120   return ((10240000L / (long)i - 10000L) * MY_SWITCH_VALUE + 5000L) / 10000;
00121 }

void StartSwitch ( void   ) 

'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten.

Parameter:
keine 
Rückgabe:
nichts
Fehler:
(Sternthaler) Die globale Variable switched sollte schon in der Funktion
mit FALSE initialisiert werden.
Hinweis:
Ueber die globale Variable switched kann nach diesem Funktionsaufruf im
Hauptprogramm geprueft werden, ob eine Taste gedrueckt wurde und kann dann
bei Bedarf die Funktion PollSwitch() aufrufen.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  StartSwitch ();
  while (!switched)         // wartet auf Tastendruck
    ;
  // an dieser Stelle kann mit Pollswitch geprüft werden
  // welche Taste gedrückt wurde, wenn nötig.
  switched = FALSE;         // Vorbereitung für neuen Aufruf von StartSwitch()

Definiert in Zeile 156 der Datei switches.c.

00157 {
00158   SWITCH_OFF;                           // Port-Bit auf LOW
00159   DDRD &= ~SWITCHES;                    // Port-Bit SWITCHES als INPUT
00160   MCUCR &= ~((1 << ISC11) | (1 << ISC10));  // Low level erzeugt Interrupt
00161   GICR |= (1 << INT1);                  // Externen Interrupt 1 zulassen
00162 }

void StopSwitch ( void   ) 

'Interrupt-Betrieb' zur Tastsensor Abfrage anhalten.

Parameter:
keine 
Rückgabe:
nichts
Hinweis:
Die globale Variable switched wird nicht mehr automatisch bei einem
Tastendruck gesetzt.
Beispiel:
(Nicht vorhanden)

Definiert in Zeile 185 der Datei switches.c.

00186 {
00187   GICR &= ~(1 << INT1);                 // Externen Interrupt 1 sperren
00188 }


Erzeugt am Sun Nov 18 18:24:53 2007 für ASURO Library von  doxygen 1.5.1-p1