Atemga32 als Inverter

OP #1651939
Lesenswert?

Hallo,

in meiner Schaltung muss ich ein Signal aus einem Mux (74 HC4067) Pin 1 
invertieren. Da ich in der Schaltung einen Atmega32 verwende wollte ich 
damit das Signal invertieren.
PortD Pin 4 soll der Eingang und Pin 5 der Ausgang für das invertierte 
Signal sein.

Im C-Programm sieht das verkürzt auf diese Routine wie folgt aus:
1
void init(void);
2
#define IMPP PORTD 
3
#define IMPPI PIND 
4
#define IMPD DDRD 
5

6
int main(void)
7
{  
8
   init();
9
   while(1){
10

11
    if (!(PIND & (1<<PIND4))) { 
12
  IMPP |= (1<<5);  
13
  }
14
  else{
15
  IMPP &= ~(1<<5);
16
  }
17
    }
18
}
19

20
void init()
21
{
22
  DDRD = 0xff;  // PORTD auf Ausgang setzen
23
  DDRD &= (1<<PD4); // Pin 4 auf Eingang (Info <<)
24

25
  PORTD=0x00;
26
}

Das Signal aus dem Mux bricht lt. Oszi fast ganz zusammen, sobald ich es 
am Atmega anschließe.
Ist der Eingangswiderstand am Atmega so niedrig, dass das Signal getötet 
wird, oder habe ich einen grundsätzlichen (Denk-)Fehler im Programm?

Gruß
Dietmar
Gast #1651956
Lesenswert?

... wobei eigentlich:


  DDRD = 0xef;  // PORTD auf Ausgang setzen

sinnvoller und einfacher wäre als:

  DDRD = 0xff;  // PORTD auf Ausgang setzen
  DDRD &= ~(1<<PD4); // Pin 4 auf Eingang (Info <<)


aber jeder wie er will ;)

sry wegen doppelpost
Gast #1652916
Lesenswert?

reduzier mal deinen Code wirklich aufs wessentliche:

int main(void)
{
  DDRD = (1<<PD5);
  while(1)
  {
    if (PIND & (1<<PIND4))  //Wenn Pin4 high
      PORTD &= ~(1<<PD5);     // -> PD5 löschen
    else
      PORTD |= (1<<PD5);      //ansonsten setzen
  }
}

Der Code sollte mit dem Mux-Ausgang an PinD4 funktionieren.
Ansonsten Schaltplan her :-)
OP #1659370
Lesenswert?

Hallo,

die Lösung ist gefunden, die Schaltung läuft!

Es war nicht, oder nicht alleine das C-Programm.

Der Mux liefert als Ausgang kein sauberes Rechtecksignal, sondern nur 
einen
sauberen Übergang von high nach low. Die Flanke low nach high ist eher 
abgetreppt, sodass das Siganl eher wie einem Nadelimpuls gleicht und 
damit kommt offenbar der Atmega32 nicht zurecht.
Habe ein Gatter eines 74HC00 dazwischen geschaltet und als Ausgang ein
ordentliches Rechtecksignal erzeugt. Das erkennt jetzt der Atmega.

Ok, dann nochmals danke und bis zur nächsten Frage.

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