Forum: Mikrocontroller und Digitale Elektronik ATmega8 PORTB als Ausgang schalten


von Manfred Steinbach (Gast)


Lesenswert?

Hallo zusammen,
Habe einen ATmega8 und das STK500. Wenn ich den PORTB als Ausgang
einstelle und 0x00 ausgebe müssten die LED´s 0-7 leuchten.
Es leuchten jedoch nur die LED´s 0-5.

ser r16
out DDRB,r16   ;Ausgang
ldi r16,0x00
out PORTB,r16  ;LED 0-5 leuchten!!!!

Liegt´s vielleicht an der Mehrfachfunktion der Bits 6 und 7 im Port B
???. Wenn ja, wie kann man alle 8 Bit des Ports als Ausgänge
programmieren ???
Bin für jede Antwort dankbar.

von Thorsten (Gast)


Lesenswert?

Hallo,

PB.6 und PB.7 dienen auch als Anschluß für einen externen Quarz. Hast
du die Fuses evtl. falsch programmiert ?

Gruß
Thorsten

von Peter D. (peda)


Lesenswert?

Die Anschlüsse für XTAL und Reset sind auf Stecker E gelegt.

Wenn man die auch benutzen will, muß man erst die entsprechenden Jumper
abziehen, sonst gibts Kurzschlüsse !


Peter

von Manfred Steinbach (Gast)


Lesenswert?

Hallo nochmal
@Thorsten: Die Fuse Bits müssten richtig sein: Boot Flash section 128
words
Brown out detection level at VCC=2,7V
Int. RC Oszill. 1MHz [CKSEL=0001 SUT=00]
@Peter: Auf dem Board sind die Jumper AREF, RESET, XTAL1 und OSCSEL
nicht gesetzt.
Merkwürdig auch, das bei dieser Konfiguration beim Betätigen des
RESET-Tasters das Programm scheinbar zurückgesetzt wird(alle LED sind
aus, solange der Taster gedrückt ist). Die beiden LED`s an PB6 und PB7
lassen sich jedoch immer noch nicht ansprechen.

Weis jemand Rat???

MfG
Manfred

von Peter D. (peda)


Lesenswert?

Wie gesagt, die beiden LEDs mußt Du mit Port E XTAL1/XTAL2 verbinden.

Peter

von Manfred Steinbach (Gast)


Lesenswert?

Vielen Dank Peter für die Erklärung. So langsam dämmerts mir.
Gibts dafür eigentlich eine Regel, oder muß man am besten jeden Pin mit
dem Durchgangsprüfer verfolgen? Oder habe ich vielleicht im Handbuch
was überlesen . . . Das Problem stellt sich ja auch bei anderen Pins.
Jedenfalls nochmal danke für die Denkanstösse.

mfg

Manfred

von Izoard (Gast)


Lesenswert?

Hi, habe genau das gleiche Problem!

Wieso sind die LED6 und LED7 nicht mit dem PortB verbunden? und wo kann
man das nachlesen, weiss das wirklich niemand?

von mmerten (Gast)


Lesenswert?

Schau dir mal die Help-Dateien zum AVR Studio an

von Izoard (Gast)


Lesenswert?

Sorry! Habe jetzt die gesamte Dokumentation des STK 500 Board
durchgelesen! In der Help Datei des AVR-Studios wird das wohl nicht
stehen? oder doch?

von mmerten (Gast)


Lesenswert?

@Izoard
Die gedruckte Doku bzw. das PDF Dokument enthält nicht alle aktuellen
Ergänzungen zu den neueren MEGA Prozessoren bzw. die u.U. erforderliche
"Sonderverkabelung". Anscheinend pflegt ATMEL diese Informationen nur
im HELP-File.

von Jogi (Gast)


Lesenswert?

Hallo zusammen
Ich habe ein Problem mit dem Atmega 128 da mache ich nun seid Tagen rum
und komme nicht weiter.
Bis ich diesen Eintrag von Dir gefunden habe.
Jetzt habe ich folgende Frage wie ist das gemeint Boot Flash section
und wo mus ich das reinschreiben. In meinem fall habe ich ein 16Mhz
Quartz anzusprechen.
Ich verwende ein selbstentwickeldes Board mit dem JTAG Interface über
das AVR Studio 4 habe ich diese Einstellungen versucht aber es
erscheint nicht das menü für die Fusebits Einstellung wie beim STK 500
+ 501 das ich schon vorher verwendet hatte.
Das AVR Studio bringt mir auch folgend Warnungen mit igendwelchen
Vektor Adressen kennst Du Dich damit auch aus.
@Thorsten: Die Fuse Bits müssten richtig sein: Boot Flash section 128
words
Brown out detection level at VCC=2,7V
Int. RC Oszill. 1MHz [CKSEL=0001 SUT=00]
@Peter: Auf dem Board sind die Jumper AREF, RESET, XTAL1 und OSCSEL
nicht gesetzt.
MFG Jogi

von dr.unheil (Gast)


Lesenswert?

Hallo,
ich habe einen ATmega8 und das STK500 und möchte einen Eingang mit nur 
einem Taster ein und danach wieder ausschalten aber ich bin leider 
absoluter Anfänger was Controller angeht.
Kann mir vielleicht wer helfen ?
Später möchte ich den Ablauf noch Zeitabhängig haben.... aber ich wäre 
schon froh wenn ich erst einmal den Anfang finden würde.
Ach ja und ich möchte in C programmieren... ist zwar schon lange her, 
aber das klappt bestimmt bald wieder.

Vielen Dank !

von Karl H. (kbuchegg)


Lesenswert?


von M. H. (doktorgnadenlos)


Lesenswert?

als Ausgang schalten :
DDRB |= (1<<PIN0)

als Eingang schalten :
DDRB &= ~(1<<PIN0)

(Das entspricht
DDRB |= 0x01;
DDRB &= ~0x01;)


Um den Ausgang aktiv auf HIGH zu schalten :
PORTB |= (1<<PIN0)

Um den Ausgang aktiv auf LOW zu schalten :
PORTB &= ~(1<<PIN0)

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.