Forum: Mikrocontroller und Digitale Elektronik PORTS schalten nicht


von da_Rula (Gast)


Lesenswert?

Hallo ich habe gerade alle PORTS mmit PORTx = 0xFF; auf HIGH geschaltet 
aber merkwürdigerweise macht der microcontroller (Atmega 16 das nicht an 
jedem I/O der PORts...

WO ran kann dies liegen?

von J. T. (chaoskind)


Lesenswert?

Hast du auch das entsprechende Datenrichtungsregister DDRx beschrieben?
Das muss als Ausgang, also 1 gesetzt werden.

Wenn du zb in PortB alle Pins auf 1 setzen willst machst du das 
folgendermaßen:
1
ldi   r16,0xff
2
out   DDRB,r16
3
out   PortB,r16

MfG Chaos

von holger (Gast)


Lesenswert?

JTAG Fuse abschalten.

von da_Rula (Gast)


Lesenswert?

Ja die Datenrtichtung habe ich festgelegt und das Abschalten der Jatg 
Fuses bringt keinen unterschied... es sieht sogar so aus das z.B PORTC 1 
immer hin und her Springt... zwischen 0 und 3.5V

von holger (Gast)


Lesenswert?

>Ja die Datenrtichtung habe ich festgelegt und das Abschalten der Jatg
>Fuses bringt keinen unterschied... es sieht sogar so aus das z.B PORTC 1
>immer hin und her Springt... zwischen 0 und 3.5V

Programm zeigen.

von J. T. (chaoskind)


Lesenswert?

Ja auf PortC liegt allerdings JTAG. Zumindest auf nem Teil von PortC...

Mit welcher Spannung versorgst du dein µC? Womit hast du die schwankende 
Spannung am PortC1 gemessen?
Wenn du ihn mit 5V versorgst, ist das ungewöhnlihc, das am Port nur 3,5 
ankommen...

von da_Rula (Gast)


Lesenswert?

#include <avr/io.h>

int main(void)
{  DDRA = 0xFF;
  DDRB = 0xFF;
  DDRC = 0xFF;
  DDRD = 0xFF;

    while(1)
    {
    PORTD = 0xFF;
  PORTA = 0xFF;
  PORTB= 0xFF;
  PORTC = 0xFF;
  }
}

von J. T. (chaoskind)


Lesenswert?

Mit C kenn ich mich zwar fast überhaupt nicht aus, aber fehlt da nicht 
ne schließende geschweifte Klammer nach der Definition der DDRx?

von Thomas E. (thomase)


Lesenswert?

j. t. schrieb:
> aber fehlt da nicht
> ne schließende geschweifte Klammer nach der Definition der DDRx?
Nee. Da fehlt nichts.

10 Zeilen Programm. Da können natürlich 10 Fehler drin stecken.
Ich sehe aber keinen.
Das liegt nicht am Programm.

mfg.

von da_Rula (Gast)


Lesenswert?

Naja die erste klammer öffnet die PRogrammfunktion und öffnet den INhalt 
der Endlosschleife... die dritte schließt sie wieder und die vierte 
vervollständigt das PRogramm....

Ich kann es mir nicht erklären warum ich fast keinen Ausgang mehr auf 
High ziehen kann dann alle PORTS sind auf Ausgang geschaltet und dann 
auch eigentlich auf High gesetzt... zumindest was die Software angeht...

-\_(';')_/-

von da_Rula (Gast)


Lesenswert?

Aber woran soll es liegen, denn das PRog ist meiner meinung nach auch 
korrekt und so viel ist es ja auch wirklich nicht !IIch kann nur noch 
sagen das MOPED steckt auf dem Pollinboard Evaluationboard 2.1 und wird 
über den AVRISP MKII angesprochen  mehr ist da nicht dran...?

von C-Troll (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Nee. Da fehlt nichts.

Wie soll man bei der Formatierung da drauf kommen?

von da_Rula (Gast)


Lesenswert?

Die frage stelle ich mir leider auch...

von Anfänger (Gast)


Lesenswert?

Hallo,
was ist wenn while() nicht ausgeführt wird?
Sind deine Bezeichner auch korrekt vordefiniert?
Wenn du PORTA = ..., ausgibst und der Bezeichner PORTA ist nicht mit der 
richtigen Adresse verknüpft, kommt nichts an.

von J. T. (chaoskind)


Lesenswert?

Stehen die Bezeichener nicht "#include <avr/io.h>" hier drin?

von da_Rula (Gast)


Lesenswert?

da ich zwischen diesen auswählen kann sobald ich einen gewissen 
Prozentsatz an Buchstabeneingeben habe gehe ich davon aus das diese 
korrekt vordefiniert sind... vermutlich in der avr/io.h...

Ich kann mich auch irren aber bin auch für jede HIlfe dankbar !

von Anfänger (Gast)


Lesenswert?

Ja, das sollte irgendwo dort drin stehen, aber du könntest es zB falsch 
schreiben ....,

Nicht zu hoch bewerten, war nur eine mögliche Idee ...
Wenn du das auswählen kannst, sollte es auch passen.

von da_Rula (Gast)


Lesenswert?

In der Simulation von AVR-STUDIO haut es auch hin...

von Thomas E. (thomase)


Lesenswert?

Anfänger schrieb:
> was ist wenn while() nicht ausgeführt wird?
Das gibt Mecker vom Compiler, aber

while(1)
{
...
}
wird solange ausgeführt bis der Controller kaputt geht.

j. t. schrieb:
> Stehen die Bezeichener nicht "#include <avr/io.h>" hier drin?
Nein da stehen die nicht drin.
Die entsprechende Headerdatei wird automatisch included.
Voraussetzung dafür ist natürlich, daß der richtige Controller 
eingestellt ist.

da_Rula schrieb:
> wird über den AVRISP MKII angesprochen  mehr ist da nicht dran
Und da muss auch die richtige Datei zum Flashen ausgewählt sein. Das 
wird nicht automatisch geändert. Da steht aktuell immer die zuletzt 
benutzte drin. Und wenn das vor zwei Jahren war.

mfg.

von Vierkant (Gast)


Lesenswert?

Anfänger schrieb:
> was ist wenn while() nicht ausgeführt wird?

Hallo Anfänger,

while(1) bedeutet:
"führe die Schleife aus, solange die Zahl 1 nicht den Wert 0 besitzt". 
Dies ist ein häufiges Konstrukt (nicht nur in C) um eine Endlosschleife 
darzustellen.

> Sind deine Bezeichner auch korrekt vordefiniert?

Der C-Code ist für den AVR-GCC geschrieben. In der Headerdatei 
'avr/io.h' werden die richtigen Definitionen für die gewählte MCU 
eingebunden.

> Wenn du PORTA = ..., ausgibst und der Bezeichner PORTA ist nicht mit der
> richtigen Adresse verknüpft, kommt nichts an.

Damit hast du vollkommen recht. In 'avr/io.h' sind Bedingungen 
enthalten, die dazu führen, dass anhand der dem Compiler mitgeteilten 
MCU die richtigen Registerzuweisungen vorgenommen werden.

Ich denke mal, der Fragesteller hat dem gcc einen falschen Wert für den 
Parameter mcu übergeben, oder der MC ist zerschossen oder falsch 
beschaltet.

von J. T. (chaoskind)


Lesenswert?

:D
Das ist auch ne gute Idee, hatte ich auch mal, hab das Programm in 
Controller geflasht, und es hat partout nicht das gemacht was es sollte. 
Ich war schon kurz vor dem Verzweifeln, hab dann noch einmal geflasht, 
dabei hab ich im Augenwinkel gesehen, das ich nicht in dem Pfad war, wo 
die "richtige" .hex steht. *gg

Gaaaanz einfach Lösung, muss man aber auch erstmal draufkommen. Quasi so 
simpel, das man vor lauter Bäumen den Wald nicht sieht =)

MfG Chaos

von amateur (Gast)


Lesenswert?

Einen Tanz im Bereich von 0 bis 3,5V habe ich nur erlebt, als ich die 
JTAG-Einstellung falsch gesetzt habe. Aber nur an den zugehörigen 
Anschlüssen.
Stimmen Deine Einstellungen bezüglich des Prozessors?
Das Programm sollte es eigentlich nicht sein.
Was benutzt Du zum Programmieren (Entwicklungsumgebung) und mit wem 
sprichst Du (Prozessor)?

von holger (Gast)


Lesenswert?

>wo die "richtige" .hex steht.

Ja, falsche HEX Datei geflasht passt zu dem Problem.
Oder JTAG Fuse doch irgendwie nicht deaktiviert.

von J. T. (chaoskind)


Lesenswert?

Wenns an JTAG läge, dürften doch eigentlich nur die Pins 1-4, oder 
welche es auch immer genau sind weiß ich nich ausm Kopf, am PortC 
ganicht reagieren. Die anderen sollten ganz einfach auf 1 bzw 5V gehen. 
Die 3,5V klingen ein wenig nach nem Pin der schnell an und aus 
geschaltet wird, und dann mit nem DVM gemessen wird(Effektivwert)....

Von daher sieht es tatsächlich nach falsch geflasht aus.

von amateur (Gast)


Lesenswert?

Beim Flashen aus dem Studio 4 habe ich des Öfteren mal Blödsinn gemacht. 
Der Flash-Dialog ist nämlich reichlich "nachtragend".
Er merkt sich den zuletzt eingestellten Prozessor auch wenn mittlerweile 
ein anderer Zuhause ist.
Auch änderte sich die eingestellte Hex-Datei (LW:Pfad:Name) nicht. 
Erschwerend kam hinzu, dass immer nur der erste Teil des Pfades 
angezeigt (sichtbar) wurde und bei der Länge der heutigen Wege selbst 
beim Wechsel des ganzen Projektes keine Änderung zu sehen war.
Keine Ahnung wie die bei den aktuellen Studios ist.

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.