Forum: Mikrocontroller und Digitale Elektronik Digitalausgänge - keine 5 Volt!


von Christoph M. (christoph_m44)


Lesenswert?

Hallo,

Ich sitze hier an einem Problem, dass ich offenbar ohne weitere Hilfe 
nicht lösen kann.

Ich entwickle gerade mit jemand anderem einen LED-Cube und verwenden 
dazu ein STK500 mit einem ATmega32.

Der Cube ist bereits verlötet und soll am Ende mit Demultiplexer 
angesprochen werden (dies wurde bereits getestet, ob das auch so 
funktioniert wie es am Ende sein soll).

Das anzeige Problem woran es jetzt eigentlich scheitert ist, dass die 
Pins eines Ports z.B.: von PortB als Ausgang keine 5 Volt liefern, so 
wie im Datenblatt beschrieben (sondern 10 mV).

Die Pins wurden zuerst als Ausgang definiert (mit DDRB = 0xFF) und 
anschließend wurden testweise die Pins des Ports mit folgenden Wert 
belegt: PORTB = 0x0F. Damit sollte doch erreicht werden, dass die ersten 
4 Pins "High" also 5Volt liefern und die nächsten 4 Pins "LOW" also 0 
Volt liefern, oder?

Ich hab' das ganze auch mit einem Messgerät nachgemessen (an GND und an 
entsprechenden Pin anlegen)

Eigenartig finde ich jedoch, wenn ich die Pins mit den Pins für die LEDs 
auf dem STK500 verbinde, leuchten sie, wie sie sollen....

Da ich auf diesem Gebiet Anfänger bin, wäre ich für jede Hilfe dankbar.
Ich hoffe ihr könnte mir weiterhelfen!

Danke!

von Karl H. (kbuchegg)


Lesenswert?

Christoph M. schrieb:

> Die Pins wurden zuerst als Ausgang definiert (mit DDRB = 0xFF) und
> anschließend wurden testweise die Pins des Ports mit folgenden Wert
> belegt: PORTB = 0x0F. Damit sollte doch erreicht werden, dass die ersten
> 4 Pins "High" also 5Volt liefern und die nächsten 4 Pins "LOW" also 0
> Volt liefern, oder?
>
> Ich hab' das ganze auch mit einem Messgerät nachgemessen (an GND und an
> entsprechenden Pin anlegen)
>
> Eigenartig finde ich jedoch, wenn ich die Pins mit den Pins für die LEDs
> auf dem STK500 verbinde, leuchten sie, wie sie sollen....

Was ein Hinweis darauf sein könnte, dass du dir mal ansehen solltest, 
was du da an deinen Mega an die Pins angeschlossen hast. Denn beliebig 
viel Strom können die Pins nicht liefern und dann machen sie genau das, 
was du auch machst, wenn ich dir auf die ausgstreckten Arme einen 50kg 
Zementsack lege: du gehst in die Knie, obwohl du mit einer Kaffetasse 
überhaupt kein Problem hast sie in die Höhe zu heben.

>
> Da ich auf diesem Gebiet Anfänger bin,

Du hast dir das denkbar ungeeignetste Anfängerprojekt ausgesucht, das 
man sich vorstellen kann.

von Christoph M. (christoph_m44)


Lesenswert?

> Du hast dir das denkbar ungeeignetste Anfängerprojekt ausgesucht, das
> man sich vorstellen kann.

Es gibt keine ungeeigneten Projekte, dauert halt einfach länger, weil 
man sich erst überall einlesen muss und noch vieles unklar ist. Wie 
gesagt, es scheitert lediglich daran, dass meine Ausgangspins keine 5 
Volt liefern, würden sie das tun, wäre der Cube fertig :-/

von Karl H. (kbuchegg)


Lesenswert?

Christoph M. schrieb:
>> Du hast dir das denkbar ungeeignetste Anfängerprojekt ausgesucht, das
>> man sich vorstellen kann.
>
> Es gibt keine ungeeigneten Projekte,

doch, die gibt es.

Alles was als Anfänger zu komplex ist, dass deine Fähigkeiten nicht 
ausreichen das Problem im Alleingang mit Anleitung durch ein Tutorial zu 
finden, ist zu komplex.

Für mich als Modellbauer ist es kein Problem ein Modellflugzeug zu 
bauen. Aber eine 747 ist für mich und meine Fähigkeiten zu komplex und 
daher ungeeignet um Aerodynamik zu lernen.

Was ist nun?
Programm?
SChaltplan?

von Icke ®. (49636b65)


Lesenswert?

Erzähl doch mal, um welchen Controller es sich handelt. Schaltplan und 
Code wären auch hilfreich.

von Hubert G. (hubertg)


Lesenswert?

Die Leds im STK500 sind Low-aktiv.
Was hast du an den Pin hängen wenn du nur 10mV messen kannst?

von Christoph M. (christoph_m44)


Lesenswert?

Wie bereits gesagt, es handelt sich um einen ATmega32
Also an den Pins hängt momentan absolut gar nichts, es geht rein darum, 
dass ich bei "HIGH"-Zustand keine 5 Volt messen kann.

Folgender "Test"-Code wurde auf den Controller übertragen:
1
int main(void)
2
{
3
  DDRB = 0xFF;
4
5
  PORTB = 0x0F;
6
7
  /*while(1)
8
  {
9
    zeichneBitmuster(led_cube);
10
  }*/
11
  return 0;
12
}

Also laut AVR-Tutorial setz ich mit DDR, hier alle auf Ausgang
und mit PORT dann den Zustand des Ausgangs....

von thomas (Gast)


Lesenswert?

Hm.. Ja, das sollte schon funktionieren.. Bist du sicher dass 
Hardwaremäßig alles ok ist? Kein Lötzinnspritzer oder dergleichen 
irgendwo?

von Karl H. (kbuchegg)


Lesenswert?

Christoph M. schrieb:
> Wie bereits gesagt, es handelt sich um einen ATmega32
> Also an den Pins hängt momentan absolut gar nichts, es geht rein darum,
> dass ich bei "HIGH"-Zustand keine 5 Volt messen kann.
>
> Folgender "Test"-Code wurde auf den Controller übertragen:
>
>
1
int main(void)
2
> {
3
>   DDRB = 0xFF;
4
> 
5
>   PORTB = 0x0F;
6
> 
7
>   /*while(1)
8
>   {
9
>     zeichneBitmuster(led_cube);
10
>   }*/
11
>   return 0;
12
> }


Du sollst die Hauptschleife nicht komplett still legen!
Wenn nichts mehr in der Hauptschleife übrig bleibt, dann bleibt eben 
nichts übrig. Dann ist die Hauptschleife eben leer.
Aber du willst niemals, unter keinen Umständen, den µC aus der main() 
heraus lassen. Der abschliessende return darf nie erreicht werden.
1
int main(void)
2
{
3
  DDRB = 0xFF;
4
 
5
  PORTB = 0x0F;
6
 
7
  while(1)
8
  {
9
    // zeichneBitmuster(led_cube);
10
  }
11
  return 0;
12
}

Wenn sich immer noch nichts tut, dann hast du ein Hardware-Problem.
Hast du an den Fuses gespielt?

von thomas (Gast)


Lesenswert?

Nanu, war die while-Schleife eben auch schon auskommentiert? Falls ja, 
sollte ich mir mal eine Brille besorgen ;) Imho müssten die Ausgänge 
aber trotzdem an bleiben, selbst wenn die main() terminiert..

von Christoph M. (christoph_m44)


Lesenswert?

Hardwaremäßig sollte alles ok sein, da ich auch probiert habe alles von 
den Pins zu trennen und mit dem Messgerät direkt bei den 
Mikrocontroller-Pins zu messen, auch da bekomm ich keine 5V (wenn ich 
jedoch auf GND und RESET anlege, bekomm ich 5V, nicht jedoch bei meinen 
PORTB Pins)

Ich könnte jedoch morgen mal das Programmierboard wechseln und den 
Mikrocontroller, habe zum Glück ein Paar Ersatzgeräte herumliegen, aber 
ich denke nicht, dass die Hardware kaputt ist, sonst würd ich ja nicht 
die Leds vom Programmierboard ansteuern können.

P.S.: also wenn ich die PINS auf HIGH sind - mess ich so um die 10mV
sind die PINS auf LOW - mess ich so um die 120mV

von Christoph M. (christoph_m44)


Lesenswert?

thomas schrieb:
> Nanu, war die while-Schleife eben auch schon auskommentiert? Falls ja,
> sollte ich mir mal eine Brille besorgen ;) Imho müssten die Ausgänge
> aber trotzdem an bleiben, selbst wenn die main() terminiert..

Sry, mein Fehler, die While wollt ich hier natürlich nicht 
auskommentieren, nur das in der While-Schleife.

Mein Programm-Code hat natürlich diese Endlosschleife, also das Programm 
terminiert nicht!

von Christoph M. (christoph_m44)


Lesenswert?

>Wenn sich immer noch nichts tut, dann hast du ein Hardware-Problem.
>Hast du an den Fuses gespielt?

Nein, die Befürchtung habe ich auch schon gehabt, dass ich 
unbeabsichtigt irgendwelche Einstellungen bei den Fuse-Bits oder sowas 
gemacht habe, deswegen habe ich den Mikrocontroller bereits ausgetauscht 
(und bei AVR Studio habe ich die Standardeinstellungen gelassen, bis auf 
den ISP-Clock -> den habe ich geändert - sonst bekomm ich einen 
Timeout), aber ich hab immer noch das Problem.

Könnte das ein Hardwareproblem des Boards sein?

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Christoph M. schrieb:
> Das anzeige Problem woran es jetzt eigentlich scheitert ist, dass die
> Pins eines Ports z.B.: von PortB als Ausgang keine 5 Volt liefern, so
> wie im Datenblatt beschrieben (sondern 10 mV).

Hast du möglicherweise ein falsches Include-File erwischt, so dass DDRB 
auf das falsche Register verweist?

P.S.: Ändert sich die Spannung von 10mV auf 0mV, wenn du PORTB auf 0 
setzt?

von Christoph M. (christoph_m44)


Lesenswert?

Markus Weber schrieb:
> Christoph M. schrieb:
>> Das anzeige Problem woran es jetzt eigentlich scheitert ist, dass die
>> Pins eines Ports z.B.: von PortB als Ausgang keine 5 Volt liefern, so
>> wie im Datenblatt beschrieben (sondern 10 mV).
>
> Hast du möglicherweise ein falsches Include-File erwischt, so dass DDRB
> auf das falsche Register verweist?
>
> P.S.: Ändert sich die Spannung von 10mV auf 0mV, wenn du PORTB auf 0
> setzt?


Bezweifle ich, ich inkludiere folgende Dateien:
1
#include <avr/io.h>
2
#include <util/delay.h>

Ich bin mir zwar jetzt nicht mehr zu 100% sicher, aber ich denke, ich 
habe gestern 120mV gemessen, sobald ein Pin auf 0 gesetzt wurde, ich 
überprüf das aber heute nochmals.

von Peter D. (peda)


Lesenswert?

Steck mal die LEDs an den Port, es müssen ja die 4 oberen LEDs leuchten.
Und die Ports, wo die LEDs aus sind, müssen 5V haben.


Peter

von Udo S. (urschmitt)


Lesenswert?

Christoph M. schrieb:
> Die Pins wurden zuerst als Ausgang definiert (mit DDRB = 0xFF) und
> anschließend wurden testweise die Pins des Ports mit folgenden Wert
> belegt: PORTB = 0x0F. Damit sollte doch erreicht werden, dass die ersten
> 4 Pins "High" also 5Volt liefern und die nächsten 4 Pins "LOW" also 0
> Volt liefern, oder?

Was sind bei dir die "ersten" und die "nächsten"
Drücke dich präzise aus. In dem Beispiel von dir werden die 4 
niederwertigen Ausgänge (B0 - B3) auf logisch 1 gesetzt und die 
höherwertigen 4 (B4 - B7) auf Low.

Was misst du wenn keine Last an den Ausgängen ist?

von Hubert G. (hubertg)


Lesenswert?

Christoph M. schrieb:
>> Hast du möglicherweise ein falsches Include-File erwischt, so dass DDRB
>> auf das falsche Register verweist?

Christoph M. schrieb:
> Bezweifle ich, ich inkludiere folgende Dateien:
> #include <avr/io.h>
> #include <util/delay.h>

Mit der Frage waren wohl nicht die #include Dateien gemeint sondern die 
Einstellung im Projekt Fenster und die Einstellung des richtigen 
Kontroller im Programmierfenster.

Ich würde wie schon vorgeschlagen die Leds anschalten und blinken 
lassen.

Wenn das nicht klappt, mal mit dem Ohmmeter auf die Pin nach GND messen. 
Spannung natürlich vorher abschalten.

von Christoph M. (christoph_m44)


Lesenswert?

> Ich würde wie schon vorgeschlagen die Leds anschalten und blinken
> lassen.
>
> Wenn das nicht klappt, mal mit dem Ohmmeter auf die Pin nach GND messen.
> Spannung natürlich vorher abschalten.

Das ist ja das Seltsame, ich kann die Leds auf dem Board blinken lassen 
:-)

von Christoph M. (christoph_m44)


Lesenswert?

Das ist ja das Seltsame, ich kann die Leds auf dem Board blinken lassen 
:-)

von Bronco (Gast)


Lesenswert?

Wie Karl-Heinz oben schon geschrieben hat: wahrscheinlich ziehst Du 
zuviel Strom aus den Pins. Dann bricht die Spannung zwangsläufig 
zusammen und Dein Controller raucht ab (falls das nicht schon passiert 
ist).

Daß die LEDs auf dem STK500 funktioniert, ist ein eindeutiges Indiz: Die 
sind so dimensioniert (mit Vorwiderstand und gegen VCC geschaltet), daß 
sie den AVR nicht überlasten.

von Christoph M. (christoph_m44)


Lesenswert?

Also das Problem lag offenbar tatsächlich an der Hardware, ich hab das 
Board ausgetauscht und den Controller und plötzlich funktioniert's.

Könnte mir aber beim besten Willen nicht vorstellen, wie ich das 
Board/den Controller geschossen habe.... sind beide neu und ich hab eig. 
noch nichts damit gemacht, außer Pinzustände gesetzt (aber nichts an die 
Pins angehängt)

Naja jetzt funktioniert zumindest alles wie geplant...

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.