PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] I/O Ports M32 ständig an ?



Mr.Deepbass
31.05.2012, 08:03
Hallo an alle,

zurzeit betreibe ich LED`s an den I/O Ports PC5 und PC7. Mir sind folgende Fragen aufgetreten:

1: Wenn ich den Roboter anschalte, liegen bereits 5 Volt am Ausgang dieser Ports an.
2: Lege ich dann die BAsis meines Transistors für die Treiberschaltung der LED an fängt die LED an zu leuchten, aber schwach zu leuchten, die Spannung am Ausgang des Ports bricht auf 2.6 VOlt zusammen.
3: Starte ich mein einfaches Programm LEuchten die LEDs normal hell und alles Funtioniert normal

Wieso sind die LEDs an wenn ich den Roboter anschalte ? ICh finde so richtig keine Lösung.

hier noch mein Programm zum testen:



//includes
#include "RP6ControlLib.h" // The RP6 Control Library.
// Always needs to be included
#include "RP6I2CmasterTWI.h" // I2C Master Library
//defines

// Main funcktion
int main(void)
{
initRP6Control();
DDRC |= IO_PC7; // PC7 Ausgang
DDRC |= IO_PC5; // PC5 Ausgang

// Low
writeString_P("So mal ein microfon test\n");

startStopwatch1();

sound(180,80,25);
sound(220,80,0);

// Simple "Alarm" Sound using setBeeperFrequency function:
while(true)
{
if(getStopwatch1() > 4000)
{
PORTC |= IO_PC7; // High
PORTC |= IO_PC5; // High

sound(180,80,25);
sound(220,80,0);
}
if(getStopwatch1() >8000)
{ PORTC &= ~IO_PC7; // Low
PORTC &= ~IO_PC5; // Low
setStopwatch1(0);
}
}
}

Danke und viele Grüße,

Christian

Kampi
31.05.2012, 08:33
Hi,

ist das JTAG Interface bei deinem Chip per Fusebits ausgeschaltet?

Mr.Deepbass
31.05.2012, 08:43
Wow,

wie bitte ? Ich verstehe gerade Bahnhof... :) Was ist das ?

OK habge gerade mal gegoogelt : http://www.mikrocontroller.net/articles/JTAG aber schlau werde ich daraus nicht, zumal wenn man in der tabelle Schaut über die Portbelegung nichtmal alle I/O Pins über dieses JTAG zu verfügen scheinen...

ISt das denn normal das beim einschalten des Roboters alle I/O Pins auf High stehen ?

Gruß Christian

PicNick
31.05.2012, 09:01
nicht normal. Standardmäßig sind alle Ports nach dem Einschalten auf Input, also hochohmig. Lies dir das mit dem JTAG durch, den kannst du mit den Fuses abdrehen.

Kampi
31.05.2012, 09:12
Das JTAG-Interface ist eine Programmier und Debugschnittstelle. Die Mega-Controller werden standartmässig mit aktiviertem JTAG ausgeliefert. Damit PortC richtig genutzt werden kann, muss man das JTAG-Enable Bit in den Fusebits des Controllers löschen. Dadurch deaktivierst du das Interface und du kannst den PortC richtig nutzen.

Mr.Deepbass
31.05.2012, 09:23
Wunderbar,

danke für die schnellen Erläuterungen, ich lese mich gerade in das Thema ein, war ja gut das ich mich mit dem Thema mal an euch wende, kam mir komisch vor mit dem Verhalten der I/O Ports. Wenn ich das nicht hinkriege mit dem JTAG-Enable Bit löschen melde ich mich nochmal.

SlyD
31.05.2012, 09:51
> Wieso sind die LEDs an wenn ich den Roboter anschalte ?


Ganz einfach:
Der Bootloader schaltet diese Pins auf EINGANG mit PULLUP.
Das wird gemacht um zu verhindern das irgendwelche angeschlossene Hardware die Pins zu stark belastet (weil z.B. Ausgang gegen Ausgang treibt).
Der Bootloader weiss ja nicht was angeschlossen sein wird.
Die Pullups sind aktiviert weil die Ports auf ein definiertes Potential gelegt werden müssen wenn nichts angeschlossen ist. Sonst fangen die sich ggf. Störungen ein und das Eingangsflipflop schaltet ständig schnell hin und her, was einiges an Energie benötigen kann.
Das ist also völlig normal so.

Und nein das hat rein gar nichts mit dem JTAG Interface zu tun, das sollte deaktiviert sein.
Daran kannst Du auch ohne ISP Programmiergerät nix ändern.


MfG,
SlyD

Mr.Deepbass
31.05.2012, 09:59
Super,

also muss ich mir deswegen keine Sorgen machen vowegen Spannungsabfall usw. ich dachte ich belaste die Outports in diesem ZUstand des uP etwas zu sehr oder so...
ICh finde es aber trotzdem Komisch, wenn ich in der Libary die I/O Ports als Ausgang definiere sowie auf LOW dann machen sie das zwar, aber erst wenn ich das Programm starte, vorher wenn ich nur anschalte sind sie auf 5V.

Nicht gerade sehr stromsparend...

Gruß Christian

SlyD
31.05.2012, 10:23
> ICh finde es aber trotzdem Komisch, wenn ich in der Libary die I/O Ports als Ausgang definiere sowie auf LOW

Dein Programm läuft zunächst gar nicht. Das wird erst gestartet wenn der Bootloader den Sprung dahin ausführt ;)

Mr.Deepbass
31.05.2012, 15:19
Hallo,

danke SlyD für den Link. Ich habe das ganze nun in sowiet verstanden:
1: Für die INitialisierung des JTAG Interfaces oder dessen Umänderung kann ich nur über entsprechende Hardware (ISP als Schnittstelle) überhaupt einfluss nehmen. also NICHT mit dem USB interface
2: Die I/O PORT's sind wenn man Spannung anlegt an uP grundsätzlich erstmal an
3: Drücke ich den Start Taster wird das Programm in den Bootloader geladen, wo u.a. die Ports ihre anfangszustände nach der INitialisierung annehmen. in meinem Fall Ausgang auf low( habe ich Umgeändert in der Libary für die Portinitialisierung

Kann man das Thema so auffassen ?

radbruch
31.05.2012, 17:22
Hallo

Ein externer PullDown (Widerstand vom Pin zu GND) könnte die Pegel an den Basen der Transistoren Richtung 0V ziehen obwohl der Bootloader die internen PullUps aktiviert hat. Im Datenblatt des Mega32 wird unter "DC Characteristics" für den "I/O Pin Pull-up Resistor" ein Wert von 20k bis 50k angegeben. Mit dem Datenblatt des Transistors und U=R*I sollte das machbar sein.

Gruß

mic

SlyD
31.05.2012, 17:25
> danke SlyD für den Link.

Welcher Link? Ach Du meinst wohl die automatisch vom Forum aufs RN Wiki gesetzten Links?
;)


> 2: Die I/O PORT's sind wenn man Spannung anlegt an uP grundsätzlich erstmal an


Nein sind sie nicht. Nur ein interner schwacher Pullup Widerstand ist aktiv (den kannst du auch auf low runterziehen
mit kleinerem externen Pulldown, braucht natürlich Energie...)

Du kannst Dein "Problem" ganz einfach lösen indem Du die Sache invertierst.
LED aus wenn der Port high und umgekehrt. Wird sowieso oft so gemacht.


> 3: Drücke ich den Start Taster wird das Programm in den Bootloader geladen,

Der Bootloader ist auch ein Programm. Da wird nix reingeladen.
Der Bootloader schreibt das Programm ab Adresse 0 in den Flash Speicher.


MfG,
SlyD

Mr.Deepbass
31.05.2012, 18:09
Wunderbar, danke für die Ratschläge

damit wären dann meine Fragen diesbezüglich ersteinmal geklärt.

Mit freundlichen Grüßen

Christian