Relais Schalten

Aus Ethersex_Wiki
(Weitergeleitet von Benutzer:DrD)
Wechseln zu: Navigation, Suche

Kleines Projekt zum Schalten von Relais

Ein ULN2803 wurde mit den 8 Ausgängen des AVR NET-IO von Pollin verbunden. Am Asgang des ULN sind 12V Relais angeschlossen, die die angeschlossenen Geräte schalten (nicht vergessen Pin10 mit der positiven Versorgungsspannung zu verbinden, sonst sind die Freilaufdioden nicht angeschlossen). Parallel zu dem Relais sind noch LEDs zur Signalisierung des Schaltzustandes angeschlossen.

Zusätzlich wurden noch Tastern an die Eingänge des NET-IO gegen Masse angeschlossen.

Hier das zugehörige Control6-Skript:

dnl Taster konfigurieren und einlesen
static uint8_t t1=0;
static uint8_t t2=0;
static uint8_t t3=0;


CONTROL_START

   ON STARTUP DO
      DDRA   &= ~_BV(PA0);            dnl switch pin for Input        DDRA(PA0) = 0
      DDRA   &= ~_BV(PA1);            dnl switch pin for Input        DDRA(PA1) = 0
      DDRA   &= ~_BV(PA2);            dnl switch pin for Input        DDRA(PA2) = 0

      DDRC  |=  _BV(PC0);	      dnl Ausgang Drucker
      DDRC  |=  _BV(PC1);	      dnl Ausgang Sound
      DDRC  |=  _BV(PC2);	      dnl Ausgang Festplatte

      PORTA  |=  _BV(PA0);            dnl     PORTA(PA0) = 1          seite 56 und 57
      PORTA  |=  _BV(PA1);            dnl     PORTA(PA1) = 1          seite 56 und 57
      PORTA  |=  _BV(PA2);            dnl     PORTA(PA2) = 1          seite 56 und 57

      PORTC  &= ~_BV(PC0);	      dnl Ausgang Drucker
      PORTC  &= ~_BV(PC1);	      dnl Ausgang Sound
      PORTC  &= ~_BV(PC2);	      dnl Ausgang Festplatte
   END

   
   if (!(PINA & 0b00000001)) t1++;	dnl prüfen ob Taste gedrückt, falls ja einen Zähler zur Entprellung inkrementieren
     else t1=0;				dnl ansonsten Zähler wieder auf Null setzen

   if (!(PINA & 0b00000010)) t2++;
     else t2=0;

   if (!(PINA & 0b00000100)) t3++;
     else t3=0;

   if (t1==5) PORTC ^= (1<<PC0);	dnl nach 5*25ms den entsprechenden Port toggeln

   if (t2==5) PORTC ^= (1<<PC1);

   if (t3==5) PORTC ^= (1<<PC2);

CONTROL_END
Ich musste die Abfrage klassisch mit einer Bitmnusterabfrage machen, da bei mir ein Abfrage des Pins mittels
PINA0
usw. nicht funktionierte.

Eingebaut wurde das Ganze in einen alten Router. Einzige Modifikation am NET-IO ist ein Kühlkörper am 7805, da ich nur ein 12V Netzteil übrig hatte. Falls gewünscht, kann ich ja noch ein paar Fotos machen.

Diese seite ist von den DrD user, bzw. AVR aus dem Channel erstellt worden.