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!
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.
> 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 :-/
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?
Erzähl doch mal, um welchen Controller es sich handelt. Schaltplan und Code wären auch hilfreich.
Die Leds im STK500 sind Low-aktiv. Was hast du an den Pin hängen wenn du nur 10mV messen kannst?
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....
Hm.. Ja, das sollte schon funktionieren.. Bist du sicher dass Hardwaremäßig alles ok ist? Kein Lötzinnspritzer oder dergleichen irgendwo?
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?
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..
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
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!
>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?
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?
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.
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
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?
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.
> 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 :-)
Das ist ja das Seltsame, ich kann die Leds auf dem Board blinken lassen :-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.