Forum: Mikrocontroller und Digitale Elektronik Portkonfiguration ATmega32


von Kai Markus Tegtmeier (Gast)


Lesenswert?

Hallo, allerseits!

Ich habe ein Problem mit der Portkonfiguration bei einem Mega32. PORTC
ist über DDRC=0x01111111 bis auf C7 als Ausgang konfiguriert. Schalte
ich aber über PORTC.2=0; den Ausgang ab, so geht der Pegel dort zwar
auf Low, scheint aber hochohmig zu werden (sagt zumindest ein Blick
aufs Oszi und Anfassen mit der Hand). Ich nehme an, dass die
Portfunktion durch irgendeine andere Einstellung überlagert wird, ich
meine aber, schon so ziemlich alles ausgeschaltet zu haben. Hier ein
Auszug aus meiner Konfigurationsdatei:

TCCR0=0;
OCR0=0;
TCCR2=0;
TCNT2=0;
TWCR=0;

MCUCR=2;
MCUCSR=0;

OCR2=0;
ASSR=0;

OCR1AH, AL, BH, BL = 0

DDRD=0x10110000;
PORTD=0x10000000;

DDRA=0;
PORTA=0;

SREG=|0x80;

UCSRA=0;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0;
UBRRL=3;

ACSR=0x80;
SFIOR=0;

ADMUX=0;
ADCSRA=0x87;

DDRB=0x00011111;

TIMSK=0x04;
TCCR1A=0;
TCCR1B=0;

GICR=0x40;

Hat jemand eine Idee, warum hier insbesondere bei PC2 das Durchschalten
auf Masse nicht sauber funktioniert?
Öffne ich ein neues Projekt und lasse mir vom Codewizard das Programm
generieren, geht es. Kopiere ich aber die Initialisierungszeilen von
dem Programm in meinen ursprünglichen Quelltext, geht es wieder nicht
mehr. Ich nehme an, es liegt an den Projekteinstellungen. Aber welche
könnten das sein?!?

Vielen Dank für Eure Hilfe!

Gruß
KMT

von Matthias (Gast)


Lesenswert?

Hi

ich würde mal stark tippen das du das JTAG-Interface nicht deaktiviert
hast (über Fuse-Bits).

Matthias

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Irgendsowas in der Richtung hatte ich auch im Verdacht. Habe gerade mal
die Fuse Bits ausgelesen. Raus kam Folgendes:

CKSEL0=1
CKSEL1=1
CKSEL2=1
CKSEL3=1
SUT0=1
SUT1=1
BODEN=1
BODLEVEL=1
BOOTRST=1
BOOTSZ0=1
BOOTSZ1=1
EESAVE=1
CKOPT=1
JTAGEN=1
OCDEN=1

Wie sollten die Fuse Bits denn sinnvollerweise stehen?
Habe einen externen Quarzoszillator mit 7,3728 MHz und Programmiere
über ISP direkt in der Schaltung mit einem STK500.
Compiler ist Codevision C.

Vielen Dank nochmals für die Mithilfe!

Gruß
KMT

von Matthias (Gast)


Lesenswert?

Hi

das die Fusebits so stehen kann ich mir fast nicht vorstellen. Wären ja
alle 1. Wie die richtig zu stehen haben kannst du dem Datenblatt
entnehmen. JTAG muß auf jeden Fall ausgeschaltet sein. Wenn du eh mit
dem AVRStudio programmierst hast du da ja eine schöne Übersicht in der
du alle Optionen aktivieren und deaktivieren kannst. Da brauchst du
dich noch nicht mal mit den einzelnen Bits auseinandersetzen.

Matthias

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Habe nochmal nachgeschaut; das Problem besteht nicht nur auf PINC.2,
sondern auch bei einigen Pins von PortD, z.B. PORTD.7. Im
eingeschalteten Zustand kein Problem, im Ausgeschalteten Zustand
(PORTD.7=0) wird der Portpin hochohmig...

Habe das JTAGEN-FuseBit abgeschaltet, das brachte aber (logischerweise)
auf PORTD.7 keine Besserung. Hat jemand noch eine Idee?

Gruß
Kai Markus

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Hat sich soeben erledigt; Doofheit vor der Tastatur war mal wieder der
bestimmende Faktor. Ich hatte in der Initialisierung das Register DDRD
so gesetzt:

DDRD=0x10110000;

Das interpretiert Codevision aber nicht als Binär-, sondern als
Hexadezimalzahl.Damit war PORT D7 als Eingang geschaltet, und ich habe
mit PORTD.7=1 bzw. 0 immer nur den Pull-Up-Widerstand ein- und
ausgeschaltet...

Gebe ich stattdessen ein: DDRD=0xB0;

läuft alles wunderbar.

Vielen Dank für Eure Mithilfe!

Gruß
KMT

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.