Problem Spannung Ausgang Atmega 32

Gast #2785066
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 ?
#2785073
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)
#2785074
@  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.
Gast #2785156
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
    }

  }
}
#2785159
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.