Forum: Mikrocontroller und Digitale Elektronik ATMEGA 32 5 Programm funktioniert nicht richtig


von Rahel M. (rahel1991)


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

von Helfer (Gast)


Lesenswert?

>  if(Eingangsregister = 0x01)
                       ^

von Rahel M. (rahel1991)


Lesenswert?

Dämlicher Fehler 'ist ja schon fast beschämend' :)
Weisst du auch was ich wegen der Zeit machen muss?

von Justus S. (jussa)


Lesenswert?

Rahel Mischler schrieb:
> Weisst du auch was ich wegen der Zeit machen muss?

du wirst wohl die falsche Taktfrequenz eingestellt haben

von Thomas E. (thomase)


Lesenswert?

Rahel Mischler schrieb:
> #include <avr/delay.h>

Davor muss der CPU-Takt definiert werden.

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

für 16MHz. Oder in Project >> Configuration Options

mfg.

von Rahel M. (rahel1991)


Lesenswert?

Ein Fuse Bit war noch falsch gesetzt. Danke für die Hilfe :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.