Forum: Mikrocontroller und Digitale Elektronik Problem Spannung Ausgang Atmega 32


von werner1 (Gast)


Lesenswert?

Hallo
Habe mein Programm auf den Atmega 32 gespielt und Taster und Led`s 
angeschlossen. Nun habe ich das Problem das ich an den Ausgang erst 
immer 5 V hatte und jetzt oft nur noch 1,7 V. Obwohl ich ihn mit 5 V 
Speise.
Woran könnte dieses liegen. Ist die Spannung im Programm umschaltbar ?

von Karl H. (kbuchegg)


Lesenswert?

werner1 schrieb:
> Hallo
> Habe mein Programm auf den Atmega 32 gespielt und Taster und Led`s
> angeschlossen. Nun habe ich das Problem das ich an den Ausgang erst
> immer 5 V hatte und jetzt oft nur noch 1,7 V. Obwohl ich ihn mit 5 V
> Speise.
> Woran könnte dieses liegen. Ist die Spannung im Programm umschaltbar ?

Das könnte zb daran liegen, dass du dir im Programm irgendwo irrtümlich 
einen Pin, der eigentlich Ausgang sein sollte auf Eingang 
umprogrammierst.

Anstalle von "Ausgang auf 0V / Ausgang auf 5V" schaltet dann dein 
Programm "Pullup weg / Pullup zu". zusammen mit der Externbeschaltung 
wechselt dann die Spannung nur noch von 0V auf 1.7V (und es steckt kein 
oder kaum mehr Strom dahinter, weil der Pin ja als Eingang programmiert 
ist)

von Falk B. (falk)


Lesenswert?

@  werner1 (Gast)

>immer 5 V hatte und jetzt oft nur noch 1,7 V. Obwohl ich ihn mit 5 V
>Speise.
>Woran könnte dieses liegen.

Programmierfehler, Port ist nicht als Ausgang geschaltet (DDRx 
Register).
Hardwaredefekt

> Ist die Spannung im Programm umschaltbar ?

Nein. Nur 0V und VCC, hier 5V.

von Jens G. (jensig)


Lesenswert?

Oder Dein Program schaltet´den Ausgang ständig zwischen H und L schnell 
hin und her. Das Verhältnis der An/Aus-Zeiten bestimmen dann die 
mittlere Spannung, die Du mißt.

von werner1 (Gast)


Lesenswert?

Dürfte eigentlich nicht sein hier mein Programm.

#include <avr/io.h>

int main(void)
{
    DDRD = 0x01 << PD0;    //PortD Pin 0 wird als Ausgang gesetzt
  DDRD = 0x01 << PD1;    //PortD Pin 1 wird als Ausgang gesetzt
  DDRD = 0x01 << PD2;    //PortD Pin 2 wird als Ausgang gesetzt

  DDRA &= ~(1 << DDA0);  //PortA Pin 0 wird als Eingang gesetzt
  DDRA &= ~(1 << DDA1);  //PortA Pin 1 wird als Eingang gesetzt
  DDRA &= ~(1 << DDA2);  //PortA Pin 2 wird als Eingang gesetzt

  PORTA |= (1<<PA0);    //Pull-up einschalten
  PORTA |= (1<<PA1);    //Pull-up einschalten
  PORTA |= (1<<PA2);    //Pull-up einschalten

  //uint8_t taster1;

//# define Taster PA0



    while(1)
    {
    if ((PINA&(1<<PA0))  )   // Abfrage PIN A2    (Taster nach GND)

    {
    PORTD |= 1<<PD0    ;    // PIN D0 = 1
    }
    else

    {
    PORTD &= ~(1<<PD0);        // PIN D0 = 0
    }

  }
}

von Christian H. (christian_h)


Lesenswert?

Schau dir die ersten drei Zeilen in der main an. Das stimmt logisch 
gesehen nicht nicht mit dem überein, was du erreichen willst. Du 
überschreibst immer wieder das Register und setzt nicht nur zusätzliche 
Bits. ändere deine = in den Zeilen 2-3 in der main in |= und nimm dir 
ein C-Buch zur Hand.

von werner1 (Gast)


Lesenswert?

Habe gerade festgestellt das die LED (3mm) meine Spannung von 5 auf 1,7 
V runterzieht. Aber normalerweise müsste der Atmega doch ein so kleinen 
Strom liefern.

von Christian H. (christian_h)


Lesenswert?

Beitrag über deinen letzten Post

von werner1 (Gast)


Lesenswert?

Danke Christian da lag der Fehler

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.