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
led kapuuuuut???? datenblatt vom atmega8 gelesen? solche schleifen werden mit winavr-c wegoptimiert : while(1) { }
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.
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.
PB6+7 werden als clock pins verwendet, nicht auf internen oszillator umgeschalten?
roboterheld wrote: > solche schleifen werden mit winavr-c wegoptimiert : > while(1) { > } Das ist ne leere Endlosschleife, die wird bestimmt nicht wegoptimiert.
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).
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.
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.
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 |
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
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 |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.