ATMEGA 32 5 Programm funktioniert nicht richtig

OP #2171910
Lesenswert?

Hallo zusammen

Ich habe ein klenes Problem mit meinem ATMEGA 32 5.
An PortG Pin 1 habe ich einen Optokoppler angeschlossen, welcher wenn 
dieser ein Signal erhält den PortG Pin 1 auf 0 ziehen soll und so den 
Pin 1 an PortA auf 1 setzt um den Transistor zu Schalten, welcher den 
Stromkreis vom Relais schliesst und dieses Umschaltet.

Dies wollte ich mit einem Testprogramm ausprobieren nun will das einfach 
nicht.

Folgendes Programm:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>

uint8_t Eingangsregister = 0;
uint8_t Ausgangsregister = 0;

int main (void)
{
 DDRA  = 0xFF;              /
 PORTA = 0x00;

 DDRG  = 0xFE;
 PORTG = 0x01;

 DDRB  = 0xFF;
 DDRC  = 0xFF;
 DDRD  = 0xFF;
 DDRE  = 0xFF;

 while (1)
 {
  Eingangsregister = PING & 0x01;

  if(Eingangsregister = 0x01)
  {
   Ausgangsregister = ~Ausgangsregister;
   _delay_ms(500);
  }
  PORTA = Ausgangsregister;
 }
}

So schaltet der Transistor durch und das Relais wird auch geschaltet.
Nach Überlegung müsste ja nun wenn ich den Optokoppler auf GND ziehe 
(das dieser voll durchleitet) der Pin 1 von PortG auch auf 0 gezogen 
werden und so PortA nicht mehr umschalten.
Könnt ihr mit weiter helfen?

Und noch was zur Zeit, die _delay_ms(500) bewirken eine Wartezeit von 
5sek. welshalb ist das so? (Ich habe keinen externen Taktgeber und 
verwende den Internen)

Herzlichen Dank im Voraus

Mfg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren