Forum: Mikrocontroller und Digitale Elektronik Spannung am ATmega32-Output unterschieldich


von eclipse (Gast)


Lesenswert?

Ich spiele gerade mit dem ADC rum und lasse ganz easy ein paar LEDs 
leuchten. Dabei passiert ständig was mir unverständliches:

Ich mache PORTC6 als OUTPUT, messe dort die Spannung und sie beträgt 5V.

Wenn ich mit dieser Null-Zeile mein Code ergänze:
//--
if(0)
    PORTC|=1<<7;
//--
dann messe ich an PORTC6 nur noch eine Spannung von 0,02V...

woran könnte das liegen?

von Peter II (Gast)


Lesenswert?

irgendwie passt OUTPUT und ADC nicht zusammen.

von eclipse (Gast)


Lesenswert?

Naja, ich messe mit dem ADC an einem Poti die Spannung und lasse dann 
der Messung entsprechend an einem anderen PIN eine Spannung anlegen.

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

eclipse schrieb:
> woran könnte das liegen?

JTAG-Fuse?

von spess53 (Gast)


Lesenswert?

Hi

>JTAG-Fuse?

Nein. Belegt PC2..PC5.

MfG Spess

von Peter D. (peda)


Lesenswert?

eclipse schrieb:
> woran könnte das liegen?

Alle Achtung, soviel Informationsgeiz ist schwer zu toppen.

von eclipse (Gast)


Lesenswert?

Won K. schrieb:
> eclipse schrieb:
>> woran könnte das liegen?
>
> JTAG-Fuse?

Ich habe den JTAG disabled mittels
..
  MCUCSR |=1<<JTD;
  MCUCSR |=1<<JTD;
..

von eclipse (Gast)


Lesenswert?

Peter D. schrieb:
> eclipse schrieb:
>> woran könnte das liegen?
>
> Alle Achtung, soviel Informationsgeiz ist schwer zu toppen.

Schaltung:

VCC----------------
______          |
--------|         |
--------|         |
atmega32|         |
ADC4----|-------|POTI|----GND
-----PC7|---LED-----------GND
-----PC6|---LED-----------GND
usw..   |---LED-----------GND
bis PC0 |---LED-----------GND
-----PD7|---LED-----------GND
______

mit dem Code:
//step ist als zahl 3 definiert
MCUCSR |=1<<JTD;
  MCUCSR |=1<<JTD;
  DDRC=0xFF;
  DDRD=1<<7;
  ADMUX |=(1<<REFS0)|(1<<MUX2);
  ADCSRA|=(1<<ADEN)|(1<<ADPS2);

  while(1){
    ADMUX|=(1<<MUX2);
    ADCSRA|=(1<<ADSC);
    while(ADCSRA&(1<<ADSC));

    //-----------------------
    if(ADC>=512 && ADC<512+step){
      PORTD|=1<<7;
    }
    if(ADC>=512+step && ADC<512+2*step){
      PORTC|=1<<0;
    }
    if(ADC>=512+2*step && ADC<512+3*step){
      PORTC|=1<<1;
    }
    if(ADC>=512+3*step && ADC<512+4*step){
      PORTC|=1<<2;
    }
    if(ADC>=512+4*step && ADC<512+5*step){
      PORTC|=1<<3;
    }
    if(ADC>=512+5*step && ADC<512+6*step){
      PORTC|=1<<4;
    }
    if(ADC>=512+6*step && ADC<512+7*step){
      PORTC|=1<<5;
    }
    if(ADC>=512+7*step && ADC<512+8*step){
      PORTC|=1<<6;
    }
    if(0){
      PORTC|=1<<7;
    }
    else{
      PORTD=0;
      PORTC=0;
    }
    }
}


zurück zur Frage:

wenn ich dieses if(0){..} hinzufüge, dann geht die Spannung von portc7 
auf von 5V auf 0.2V runter... wie kommt das zustande?

von Toni Tester (Gast)


Lesenswert?

eclipse schrieb:
> woran könnte das liegen?

Du hast einen Typo in main.c Zeile 42.

Alternativ beim Compilieren die Option -DENABLE_CLAIRVOYANCE_MODE 
ergänzen; dann geht's.

von Toni Tester (Gast)


Lesenswert?

eclipse schrieb:
> wenn ich dieses if(0){..} hinzufüge, dann geht die Spannung von portc7
> auf von 5V auf 0.2V runter... wie kommt das zustande?

Hast du doch genau so beschrieben:

eclipse schrieb:
> if(0){
>       PORTC|=1<<7;
>     }
>     else{
>       PORTD=0;
>       PORTC=0;
>     }

Welches Verhalten würdest du hier sonst erwarten?

von Klaus (Gast)


Lesenswert?

Wegen dem hier:
1
      PORTC=0;

Nimm es mir bitte nicht übel, aber die Kombination von unzureichender 
Information, in Salamischeiben serviert und im Ergebnis auf mangelnde 
C-Kenntnis zurückzuführen, ist unangenehm für die Leser und Antworter.

von Peter D. (peda)


Lesenswert?

if(0)...
else ...

Bewerb Dich mal bei ner Rätselecke.

von eclipse (Gast)


Lesenswert?

Toni Tester schrieb:

> Welches Verhalten würdest du hier sonst erwarten?

Dankesehr, ich hab diese if-abfrage eingefügt und habe nicht beachtet, 
dass mein else dahinter steht! Hätte halt dann aber erwartet, dass ich 
0V an den PINS kriege, wohl wahrscheinlich die 0,2 wegen dem  ständigen 
Ein-und-Ausschalten!

 Peter Dannegger schrieb:
> Bewerb Dich mal bei ner Rätselecke.

Ich stelle meine Fragen beim nächsten Mal auch ordentlicher, das seh ich 
ja ein ;)

Dankeschön

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.