Forum: Mikrocontroller und Digitale Elektronik Atmega: Spannung an Ausgängen bricht ein


von FabC (Gast)


Lesenswert?

Servus,

Nun wie der Betreff schon sagt, bricht bei mir die 5V Spannung an allen 
Ausgängen zusammen sobald ich mehr als einen Pin schalte. Sowohl mit als 
auch ohne Last. In alten Themen war die Rede davon, dass das passiert 
wenn man die Ports als Eingang geschaltet hat aber das habe ich gemacht 
und es funktionert nicht.

Es sei denn, ich habe irgendetwas Grundlegendes verdreht oder völligst 
falsch verstanden.

AVR-Studio:
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  DDRD = 0b11111111;
6
  
7
  while(1)
8
    {    
9
      PORTD=(1<<PD0);
10
      PORTD=(1<<PD2);
11
      PORTD=(1<<PD4);
12
  }
13
    
14
}

Beschaltung des AVRs entspricht der Grundschaltung. An den Ausgängen 
sind drei LEDs. Nichts Großartiges.

von Clock (Gast)


Lesenswert?

Und worin äußert sich dein Spannungseinbruch? Leuchten denn die LEDs? 
Womit bzw. wie hast du das gemessen?

von Thomas W. (ratos)


Lesenswert?

Schreibe doch mal:

PORTD|=(1<<PD0);
PORTD|=(1<<PD2);
PORTD|=(1<<PD4);

von Al3ko -. (al3ko)


Lesenswert?

FabC schrieb:
1
> int main(void)
2
> {
3
>   DDRD = 0b11111111;
4
>   
5
>   while(1)
6
>     {    
7
>       PORTD|=(1<<PD0);
8
>       PORTD|=(1<<PD2);
9
>       PORTD|=(1<<PD4);
10
>   }
11
>     
12
> }
So sieht der Code in meinen Augen besser aus.
> Beschaltung des AVRs entspricht der Grundschaltung. An den Ausgängen
> sind drei LEDs. Nichts Großartiges.

von Michael (Gast)


Lesenswert?

FabC schrieb:
> Nun wie der Betreff schon sagt, bricht bei mir die 5V Spannung an allen
> Ausgängen zusammen sobald ich mehr als einen Pin schalte.

Wahrscheinlich auf irgendetwas um 1,7V, wobei die Spannung an PD4 
deutlich höher ist. Du betreibst deine Ausgänge im Zeitmultiplex. Guck 
dir das mal im Simulator an.

von FabC (Gast)


Lesenswert?

Michael schrieb:
> Wahrscheinlich auf irgendetwas um 1,7V, wobei die Spannung an PD4
> deutlich höher ist.

Ja es ist auf teilweise auch auf 0,9V zusammengebrochen.


Gut das mit
1
PORTD|=(1<<PD0);
funktionert nun. Alle haben jetzt 4,7-5V.

Aber nunja, warum macht das nun so einen Unterschied?

von Al3ko -. (al3ko)


Lesenswert?

FabC schrieb:
> Aber nunja, warum macht das nun so einen Unterschied?

Du hast offenbar nicht verstanden, was das kleine | (ODER) macht.

Hast du dir schon den Artikel zur Bitmanipulation durchgelesen?

Schreibe doch mal bitte beide Varianten auf dem Papier auf und schau, 
was mit dem jeweiligen PORT passiert.


Gruß

von Spess53 (Gast)


Lesenswert?

Hi

>Aber nunja, warum macht das nun so einen Unterschied?

      PORTD=(1<<PD0);  -> PortD = 0b00000001
      PORTD=(1<<PD2);  -> PortD = 0b00000100
      PORTD=(1<<PD4);  -> PortD = 0b00010000


      PORTD|=(1<<PD0);  -> PortD = 0b00000000 or 0b00000001 = 0b00000001
      PORTD|=(1<<PD2);  -> PortD = 0b00000001 or 0b00000100 = 0b00000101
      PORTD|=(1<<PD4);  -> PortD = 0b00000101 or 0b00010000 = 0b00010101

MfG Spess

von FabC (Gast)


Lesenswert?

Ok das muss ich mir alles nochmal genauer durchlesen.
Immerhin funktionert es schonmal.

Vielen Dank (-:

Fabio

von Carry (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/Bitmanipulation
Könnte helfen wenn die Ausgänge auch mal aus gehen sollen ;)

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.