Forum: Mikrocontroller und Digitale Elektronik Anfänger - einfacher Aufbau mit LEDs und ATmega8 geht nicht


von chris5787 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich arbeite im Moment das Tutorial auf diesen Seiten durch und habe 
leider bei den ersten Versuchen mit den LEDs und dann auch mit dem LCD 
keinen Erfolg gehabt. Ich habe mir dann gedacht ich schreibe mir ein 
ganz einfaches Porgramm, um zu testen ob wenigstens das funktioniert.
Das Programm soll ganz simpel schauen, wo am Eingang B Spannungen 
anliegen und soll diese dann einfach auf die Ausgänge C übertragen. 
Also, wenn an PB4 eine Spannung anliegt, dann soll das dazu führen, dass 
auch an PC4 eine Spannung anliegt. PC2 soll immer ohne Spannung bleiben.
Das Ergebnis ist, dass zwar an PC2 tatsächlich nie die LED leuchtet, an 
den anderen C-Ausgängen jedoch immer, unabhängig vom Zustand der 
B-Eingänge.

Ich verwende einen ATmega8, diesen Aufbau zur Stromversorgung
http://www.mikrocontroller.net/articles/Bild:Avr-schaltplan-1.gif
und diesen ISP-Programmer
http://s-huehn.de/elektronik/avr-prog/avr-seriell.gif
und zwar über einen USB-Seriell-Wandler (was abartig langsam geht :D).
Den Programmer entferne ich, nachdem ich das Programm übertragen habe, 
die LEDs sind alle mit Vorwiderstand an GND angeschlossen und 
funkionieren.

War sehr blöd, als das einfache Programm auch nicht funkioniert hat :( 
aber ich hoffe ihr könnt mir helfen ;)

von chris5787 (Gast)


Lesenswert?

Ergänzung:

Ich verwende PonyProg zum Übertragen des Programms, zum Erstellen der 
HEX-Datei verwende ich AVRStudio4.

von Micha R. (michaavr)


Lesenswert?

Kannst du mal einen auszug aus deinem programm hier rein kopieren?

von Falk B. (falk)


Lesenswert?

@ chris5787 (Gast)

>War sehr blöd, als das einfache Programm auch nicht funkioniert hat :(
>aber ich hoffe ihr könnt mir helfen ;)

Dein Programm ist erstmal so OK. Wie legst du denn Spannung an dein PB4? 
Verbindest du es mit einem Draht mit GND bzw. VCC? Wenn ja, dann sollte 
es laufen.

Anderenfalls

AVR-Tutorial: IO-Grundlagen

MFG
Falk

von chris5787 (Gast)


Lesenswert?

@michaavr: kompletter Code ist beim ersten Post als Anhang dabei.

@falk:
Ja, ich benutze einfach einen Draht, um Spannung an die B-Eingänge zu 
legen.
Was vielleicht noch wichtig ist: Ich habe das ganze auf ein Steckbrett 
aufgebaut, außer dem ISP-Programmer und der Spannungsversorgung, die 
wurden gelötet. Die 5-V-Spannungsversorgung ist diese hier
http://www.mikrocontroller.net/articles/Bild:V_Regler.gif

von Karl H. (kbuchegg)


Lesenswert?

chris5787 wrote:
> @michaavr: kompletter Code ist beim ersten Post als Anhang dabei.
>
> @falk:
> Ja, ich benutze einfach einen Draht, um Spannung an die B-Eingänge zu
> legen.

Ich interpretiere das mal so, dass du mit einem Draht den
Pin mit Vcc (also mit +) verbindest. Es mnuss aber anders rum sein:
Du musst mit einer Drahtbrücke nach Masse (also -) verbinden.

von chris5787 (Gast)


Lesenswert?

Aber warum? Zum Beispiel soll an PC1 die LED leuchten. Dafür verbinde 
ich PB1 mit Vcc, dann wird an dieser Stelle eine 1 eingelesen. Diese 1 
wird dann an PC1 wieder ausgegeben, dort sollten dann also +5V anliegen. 
Und dann müsste die LED leuchten, denn diese ist folgendermaßen an PC1 
angeschlossen:
PC1 -- LED -- Widerstand -- GND
Müsste doch so funktionieren oder?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

chris5787 wrote:
> Aber warum? Zum Beispiel soll an PC1 die LED leuchten. Dafür verbinde
> ich PB1 mit Vcc, dann wird an dieser Stelle eine 1 eingelesen. Diese 1
> wird dann an PC1 wieder ausgegeben, dort sollten dann also +5V anliegen.
> Und dann müsste die LED leuchten, denn diese ist folgendermaßen an PC1
> angeschlossen:
> PC1 -- LED -- Widerstand -- GND
> Müsste doch so funktionieren oder?

Zwischen PB1 und Vcc würde ich noch einen Widerstand schalten.

Wenn du zufällig PB1 mal aus Ausgang geschaltet hast und LOW ausgibst, 
hast du ohne Widerstand einen Kurzen.

Wenn du zufällig am µC keine Vcc Spannung hast aber am PB1, quälst du 
die Schutzdioden des µC mit einem Kurzen.

In deiner "High active" LED Schaltung muss die LED mit der Anode (langes 
beinchen) an PC1 angeschlossen sein.

Soweit zur Hardware. Wenn trotzdem es nicht klappt, kann es auch an der 
Software liegen.

In deinem Code.txt oben (den ich unten etwas lesbarer umgeschrieben 
habe) hast du an PORTB alle Pull-Ups aktiviert. Du hast an PINB immer 
logisch HIGH, egal ob PB1 an Vcc angeschlossen ist oder frei in der Luft 
bambelt. Nur wenn du PB1 mit GND verbindest, bekommst du LOW als Eingabe 
(s. Antwort von Karl heinz Buchegger).
1
.include "m8def.inc"
2
3
.org 0x0000
4
   rjmp reset
5
6
reset:
7
   ; Stack vorbereiten
8
   ldi R16, LOW(RAMEND)
9
   out SPL, R16
10
   ldi R16, HIGH(RAMEND)
11
   out SPH, R16
12
13
   ; PINB 0-7 Eingang
14
   ldi R16, 0x00
15
   out DDRB, R16
16
17
   ; PORTB 0-7 Pull-Ups aktivieren
18
   ldi R16, 0xFF
19
   out PORTB, R16
20
21
   ; PORTC 0-7 Ausgang
22
   ldi R16, 0xFF
23
   out DDRC, R16
24
25
loop:
26
   in R17, PINB
27
28
; alt, geht nicht
29
;   andi R17, 0b11111011 ; Wo steht die 0 ??? => PB2 manipulieren?
30
31
; Alternative1: PC1 toggeln durch PB1
32
   ldi R16, 0b00000010
33
   eor r17, r16
34
35
; Alternative2: PC1 folgt PB1
36
;   andi R17, 0b00000010
37
 
38
   out PORTC, R17
39
   rjmp loop
40
41
; ENDE

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.