Forum: Mikrocontroller und Digitale Elektronik leds leuchten nicht


von grant (Gast)


Lesenswert?

hi all,
ich hab heute mit atmega8 versuchen, zu programmieren. als erstes will 
ich ja nur den ausgang probieren und hier kommt mein problem schon.

//code//
#include <avr/io.h>

int main (void) {

   DDRB  = 0xff;
   PORTB = 0x00;

   while(1) {
   }
   return 0;
}

wenn ich mich nicht irre, müssen alle leds leuchten. die sw7 und 6 
leutchten aber nicht. kann jemand mir irgendwie weiter helfen oder 
sagen, was ich falsch machen könnte?
vg
grant

von roboterheld (Gast)


Lesenswert?

led kapuuuuut????
datenblatt vom atmega8 gelesen?

solche schleifen werden mit winavr-c wegoptimiert :
while(1) {
   }

von Johannes M. (johnny-m)


Lesenswert?

Lass mal raten: Du arbeitest mit nem STK500 und benutzt die auf dem 
Board befindlichen LEDs?

Die Pins 6 und 7 von Port B des ATMega8 sind nicht auf dem 
PortB-Pinheader, sondern auf dem PortE/Aux-Header (XTAL1 und XTAL2). 
Nimm für die Ausgabe einen anderen Port oder versuche irgendwie, die 
beiden LEDs mit den entsprechenden Pins des PortB-Steckers zu verbinden.

von grant (Gast)


Lesenswert?

leds sind nicht kaputt, da ich hab versucht, die pinb(0-5), die 
leuchten, auf diese led6 und 7 zu überbrücken. sie leuchten dann. aber 
wenn ich die pin6 und 7 auf andere ledx überbrücke, leutchten die ledx 
nicht.

von Matthias (Gast)


Lesenswert?

PB6+7 werden als clock pins verwendet, nicht auf internen oszillator 
umgeschalten?

von Johannes M. (johnny-m)


Lesenswert?

roboterheld wrote:
> solche schleifen werden mit winavr-c wegoptimiert :
> while(1) {
>    }
Das ist ne leere Endlosschleife, die wird bestimmt nicht wegoptimiert.

von Manos (Gast)


Lesenswert?

Ich gehe mal davon aus, dass Du am PortB.6 und B.7 keine Quarz anliegen 
hast...

Vielleicht LEDs falsch rum eingebaut?

Manchmal gibt es alternative Portfunktionen die erst abgeschaltet werden 
müssen um diese Ports nutzen zu können  (z.B. Reset).

von grant (Gast)


Lesenswert?

vielen danke johannes
da hast du recht. ich hab mit dem stk500 gearbeitet und hab mit dem port 
c und d programmiert. bei c habe ich dasselbes problem aber bei d hat es 
geklappt.

von Johannes M. (johnny-m)


Lesenswert?

grant wrote:
> vielen danke johannes
> da hast du recht. ich hab mit dem stk500 gearbeitet...
Beim nächsten Mal bitte direkt erzählen, mit was für einer Hardware Du 
arbeitest. Dann muss man nicht so viel nachfragen und raten!

> und hab mit dem port c und d programmiert. bei c habe ich dasselbes problem > 
aber bei d hat es geklappt.
PortC.6 ist ja auch normalerweise der Reset-Pin, den man extra freigeben 
muss, um ihn als I/O nutzen zu können. Und PortC.7 existiert beim Mega8 
gar nicht.

von Michael W. (herr_welker)


Lesenswert?

Hi,

ich hab des selbe Problem, dass bei meinem STK 500 keine LED's leuchten.
Die Leuchten funktionieren.

Ich benutze einen Atmega16 (habe schon zwei verschiedene probiert).
Zur Übertragung benutze ich AVR Studio 4.

Die Übertragung funkioniert tadellos.

Hier mal des Programm:
1
include "m16def.inc"
2
3
loop:   ldi r18,0b10101010
4
5
  out DDRB, r18
6
7
  rjmp loop

von Herr Bst (Gast)


Lesenswert?

Sie haben bis jetzt nur via <out DDRB, r18> die I/O definiert.
Jetzt müssen Sie noch die Ausgänge ansteuern.
z.B so

ldi r18,0x00
out PORTB,r18

von Michael W. (herr_welker)


Lesenswert?

Also so etwa.

Leider gehts immer noch nicht. Ich komm einfach nicht drauf warum.

Fuses (mit Häckchen aktiviert):

-On-Chip Debug Enabled
-Boot Flash section size=1024 words Boot start 
adress=$1C00;[BOOTSZ=00];default value
-Brown-out detection level at VCC4,0V
-Brown-out detecion enabled
-Int. RC OSC 4MHz; Start-up time: 6CK+0ms

LockBits (mit Häcken aktiviert):

-Mode 1: No memory lock features enabled
-Application Protection Mode 1: No lock on SPM and LPM in Application 
Section
-Boot Loader Protection Mode 1: No lock on SPM and LPM in Boot Loader
1
#include "m16def.inc"
2
3
loop:   ldi r18,0b10101010
4
    out DDRB,r18
5
    out PortB,r18
6
      rjmp loop

von Herr Bst (Gast)


Lesenswert?

Ach ja, der DDRB ist noch falsch gesetzt.
"1" bedeutet Ausgang, "0" Eingang.
Somit lautet der Programmabschnitt so:

.include "m16def.inc"

loop:
    ldi r18,0xFF
    out DDRB,r18     ;setzt kompletten PortB als Ausgang
    ldi r18,0x00
    out PORTB,r18    ;aktiviert LEDs
rjmp loop

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.