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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.