PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M32: Spannung an I/O-Ports



RobotMichi
29.07.2010, 10:39
Hallo,

ich hab momentan ein Problem mi einigen meiner I/O-Ports.
Wenn ich IO_PC2 auf high setze, liegen nur 2,7V an.
Bei IO_PC3 ligt bei Zustand high überhaupt nichts an - d.h. lässt sich nicht auf high setzen.
Und bei IO_PC5 liegen bei high nur 4,2V an, wobei ich mir da noch vorstellen könnte, dass das eine normale Abweichung ist.
Die anderen Ports lassen sich ganz normal high und low setzen - die high Spannung schwankt zwischen 4,9 und 5,0V, also im Normbereich.

Was könnte da die Ursache sein? Ich steuere mit den Ports einen L293D Motortreiber, der zieht von den Steuerungspins sicher nicht mehr als 20mA.
Ich hab schon alles nachgemessen, Kurzschluss ist da auch keiner.

lg
Michi

021aet04
29.07.2010, 10:45
Kannst du die Verbindung zw. µC und L293 trennen? IC herausgeben o.Ä.? Poste das Programm.

PS: Meine Glaskugel funktioniert gerade nicht. Damit man eine Antwort geben kann braucht man mehr Informationen.

MfG Hannes

BMS
29.07.2010, 11:01
Beim Atmega32 werden PC2, PC3 und PC5 auch für die JTAG-Schnittstelle benutzt.
Hatte vor ein paar Tagen dasselbe Problem bei einem brandneuen Atmega32.
Du hast mit 100%iger Sicherheit die JTAGEN-Fuse noch gesetzt. Diese unbedingt löschen (z.B. mit Ponyprog). Dann verhalten sich die Ports normal.

oberallgeier
29.07.2010, 11:19
Beim Atmega32 werden PC2, PC3 und PC5 auch für die JTAG-Schnittstelle benutzt ...[Pingelig ein]Beim m32 wird fürs JTAG auch PC4 benutzt: TDO (JTAG Test Data Out)[Pingelig aus]. Im Übrigen hast Du natürlich recht:

[/size]VR–06/08 auf Seite 5]... If the JTAG interface is enabled, the pull-up resistors on pins PC5(TDI), PC3(TMS) and PC2(TCK) will be activated even if a reset occurs ...

RobotMichi
29.07.2010, 12:31
Hallo,

@BMS ich kann Ponyprog nicht installieren, weil es nicht auf eine 64Bit Architektur ausgelegt ist und ich Win7 64 Bit verwende.
Gibt es da Alternativen bzw. einen Programmcode oder Hex-File für den RP6 mit dem man die JTAG-Schnittstelle deaktivieren kann?
Ich hab ein bisschen gegoogelt, aber nichts brauchbares gefunden.

lg
Michi

TheDarkRose
29.07.2010, 12:44
avrdude *15zeichen*

RobotMichi
29.07.2010, 13:15
@TheDarkRose: Leider das selbe Problem!

lg
Michi

Richard
29.07.2010, 13:49
Avr Studio? Ob das mit 64 Bit läuft..keine Ahnung aber Fuse Bit`s setzen
und lesen geht damit super leicht (verständlich).

Gruß Richard

TobiKa
29.07.2010, 13:53
Ich benutze das AvrStudio unter Win7 x64 und es läuft ohne Probleme.

RobotMichi
29.07.2010, 14:15
Hallo,

ich hab jetzt doch das Ponyprog200 zum Laufen gebracht.
Wie muss ich den seriellen Port nun konfigurieren (siehe Anhang)? Muss ich irgendwelche Pins invertieren?

lg
Michi

oberallgeier
29.07.2010, 14:56
Mit dem (seriellen ?) RP6-Programmer kenn ich mich leider nicht aus.

Richard
29.07.2010, 16:25
Mit den RP 6 kenne ich mich leider auch nicht aus, aber wenn dein Programmer
für seriell ausgelegt ist sollte das so wie Du es eingestellt hast klappen.
Ich benutze das AVR Studio (Gewohnheit). Poni Prog habe ich aber auch
schon benutzt und eben kurz aufgerufen um nach den alten Einstellungen
zu schauen. Das habe ich auch nur seriell und com Pord eingestellt, es ist
aber auch ein Test Knopf vorhanden. Ich vermute das man damit die
Verbindung testen kann. Wie man mit Poni Prog Fuses anzeigt/Ändert?

Gruß Richard

SlyD
29.07.2010, 17:54
Der RP6 verwendet einen Bootloader über die Serielle Schnittstelle - damit kann man die Fusebits (aus gutem Grund) nicht ändern!

Die sollten im Werk schon richtig gesetzt worden sein und JTAG ist deaktiviert.


Also - trenne ALLE Kabel die Du abtrennen kannst (nicht nur vom betroffenen Steckverbinder sondern ALLE) und vor allem den L293 aus dem hoffentlich vorhandenen Sockel ziehen (man sockelt solche ICs aus genau diesem Grund).
Dann nochmals messen.

Und das verwendete Testprogramm hier posten.

MfG,
SlyD

RobotMichi
29.07.2010, 18:33
Hallo,

ich habe das Erweiterungsmodul jetzt ganz vom Roboter getrennt, ich habe alles abgesteckt.
Beim Messen erhalte ich wieder die im ersten Beitrag des Threads bereits erwähnten Ergebnisse.

Im Programm habe ich einfach alle I/O-Ports (außer den ADCs) auf high gesetzt, um dann zu messen:


#include "RP6ControlLib.h"

int main(void)
{
initRP6Control();

DDRD |= IO_PD5;
DDRD |= IO_PD6;
DDRC |= IO_PC2;
DDRC |= IO_PC3;
DDRC |= IO_PC4;
DDRC |= IO_PC7;
DDRC |= IO_PC5;
DDRC |= IO_PC6;

PORTD |= IO_PD5;
PORTD |= IO_PD6;
PORTC |= IO_PC2;
PORTC |= IO_PC3;
PORTC |= IO_PC4;
PORTC |= IO_PC7;
PORTC |= IO_PC5;
PORTC |= IO_PC6;

while(1);

return 0;
}

lg
Michi

RobotMichi
30.07.2010, 19:22
Hallo,

ich hab jetzt mein Testprogramm noch erweitert, jetzt werden auch alle ADCs als I/Os definiert und auf high gesetzt:

#include "RP6ControlLib.h"

int main(void)
{


initRP6Control();
initLCD();

showScreenLCD("Roboterkran:","Testprogramm");

DDRD |= IO_PD5;
DDRD |= IO_PD6;
DDRC |= IO_PC2;
DDRC |= IO_PC3;
DDRC |= IO_PC4;
DDRC |= IO_PC7;
DDRC |= IO_PC5;
DDRC |= IO_PC6;

DDRA |= ADC2;
DDRA |= ADC3;
DDRA |= ADC4;
DDRA |= ADC5;
DDRA |= ADC6;
DDRA |= ADC7;

PORTD |= IO_PD5;
PORTD |= IO_PD6;
PORTC |= IO_PC2;
PORTC |= IO_PC3;
PORTC |= IO_PC4;
PORTC |= IO_PC7;
PORTC |= IO_PC5;
PORTC |= IO_PC6;

PORTA |= ADC2;
PORTA |= ADC3;
PORTA |= ADC4;
PORTA |= ADC5;
PORTA |= ADC6;
PORTA |= ADC7;

while(1);

return 0;
}

Dann habe ich wieder die anliegende Spannung gemessen - bei allen ADCs ziemlich genau 5V.
Wenn's nicht JTAG ist, was könnte dann die Fehlfunktion - nur auf PORTC wohlgemerkt - verursachen? :-k

lg
Michi

oberallgeier
31.07.2010, 09:25
Hi RobotMichi,

leider kann ich kein Bas com. Aber so wie ich Deinen Code verstehe, setzt Du da etliche DDRnx´s auf 1 => Du definierst die zugehörigen Pins als Ausgänge. Dann setzt Du noch etliche PORTnx´s => damit weist Du den Controller an, den entsprechenden Pin (!) auf 1 = high = 5V zu schalten. Und das stellst Du ja dann auch fest, oder habe ich da etwas falsch verstanden?

Wenn ich einen ADC einlesen möchte, dann ist der entsprechende Pin bei mir ein Eingang, das entsprechende DDRnx wird auf 0 (in Worten: Null) gesetzt, in C sieht das etwa so aus: ((ADDR) &= ~(1<<(BIT))). Beim ADC macht es eigentlich wenig Sinn, den internen Pullup einzuschalten. Der bleibt auf Null oder wird in dieser speziellen Anwendung (als analoger Eingang), wenn vorher etwas Unklares passiert sein könnte, explizit auf Null gesetzt. Bei manchen "anderen" Eingängen wird der interne PullUp geschaltet - das kommt aber ganz auf die Problem-/Fragestellung an. Denk daran:

Pins/Ports mit DDRnx als Ein- (0) oder Ausgänge (1) definieren, Pull Ups bei Eingängen (DDRnx = 0!!) mit PORTnx (1) aktivieren, mit (0) ausschalten, Ausgänge (DDRnx = 1 !!) mit PORTnx einschalten durch (1) oder ausschalten durch (0). Geschaltete Ausgänge können etwa 20 mA treiben - siehe Datenblatt für ausführlichere Angaben.

Dirk
31.07.2010, 13:19
@Michi:

Wenn's nicht JTAG ist, was könnte dann die Fehlfunktion - nur auf PORTC wohlgemerkt - verursachen?

Manchmal mißt man mit Messgeräten auch "Mist".

Schließ doch mal an alle Pins von PortC je eine Low-Current-LED mit Vorwiderstand 1500 Ohm gegen Masse an.

Die müßten dann korrekt an oder aus sein (je nach Programm! Du kannst sie ja auch mal blinken lassen!).

Gruß Dirk

RobotMichi
31.07.2010, 14:41
Hallo,

@Dirk: Ich habe deinen Rat mit den LEDs befolgt - Die LED an IO_PC3 leuchtet bei high gar nicht und bei IO_PC2 nur schwach. Bei den anderen lässt sich die LED korrekt schalten.
Das heißt, ich habe keinen "Mist" gemessen, die Ergebnisse des Tests mit den LEDs und die der Messung bestätigen sich.

lg
Michi

Dirk
31.07.2010, 18:33
@Michi:

Die LED an IO_PC3 leuchtet bei high gar nicht und bei IO_PC2 nur schwach. Bei den anderen lässt sich die LED korrekt schalten.

Da bleiben nur 2 Möglichkeiten, wenn da sonst keine Hardware dranhängt:
1. Die Verbindung vom Prozessorpin PC2 und PC3 zum Stecker, an dem du die LED anschließt, hat ein Problem. Durchmessen!
2. Du hast (leider) diese 2 Pins geschrottet.

Gruß Dirk

RobotMichi
31.07.2010, 21:19
Hallo,

wie's aussieht sind die beiden Pins defekt. :(
Die Leitungen haben jedenfalls kein Problem, ich habe auch die Ausgangsspannung direkt am µC gemmessen - das sind die selben Werte wie am Stecker.

Ob ich das selber war oder ob die Pins nicht doch schon bei der Lieferung kaputt waren, stelle ich dennoch in Frage.
Ich habe nämlich vor kurzem eine neue M32 bekommen, weil ich die alte eingeschickt hatte, da der µC immer heiß wurde.

Wenn ich die Pins selbst geschrottet habe, wie könnte das passiert sein?
Ich hatte einmal einen billigen L293D Motortreiber - da gibt es offfenbar auch qualitative Unterschiede - der ist durchgebrannt.
Der IC-Sockel war verschmort und der Motor hat verrückt gespielt. Könnte es sein, dass der Motortreiber, nachdem er durchgebrannt war, die Motorspanung (ca.10V) zu den Steuerpins (eben den betroffenen!) durchgestellt hat und so die Pins geschrottet hat?

lg,
Michi

Dirk
31.07.2010, 22:02
Könnte es sein, dass der Motortreiber, nachdem er durchgebrannt war, die Motorspanung (ca.10V) zu den Steuerpins (eben den betroffenen!) durchgestellt hat und so die Pins geschrottet hat?
Wäre möglich.
Wenn ein Treiber-IC völlig abbrennt, kann alles mögliche passieren.

Einen kompletten Schutz gibt es nicht bzw. man müßte eine Schutzschaltung für jeden Pin nehmen.
Als Einfachstes: 470 Ohm Widerstand in Reihe an jedem Pin.

Gruß Dirk

P.S.: C. ist ja eigentlich recht kulant. Umtauschen?

RobotMichi
01.08.2010, 11:13
Hallo,

dann werd ich mal versuchen, die Platine umzutauschen.
Danke für eure Hilfe bei der Fehlerdiagnose!

lg
Michi

SlyD
01.08.2010, 11:33
Hallo,

> Abgebrannter Motortreiber

tja das hättest Du im ersten Posting mal erwähnen sollen :-/

So ein Mikrocontroller ist sehr sehr empfindlich was Überspannungen angeht. Sowohl gegen elektrostatische Entladungen wenn man mit den Fingern die Kontakte berührt ohne sich regelmäßig zu erden als auch wenn man da direkt eine zu hohe Spannung anlegt.

Wenn der Motortreiber "durchgebrannt" ist, ist auch nicht auszuschließen das die Pins währenddessen einen zu hohen Strom liefern mussten...

--> Daher eigentlich kein Garantiefall!
(wollte ich nur erwähnen, nicht das hier jeder auf die Idee kommt bei sowas einfach mal zu versuchen es umzutauschen)

MfG,
SlyD

TrainMen
06.08.2010, 12:00
ich will doch hoffen das keiner so dumm ist, es nicht zu versuchen.

oberallgeier
06.08.2010, 12:18
ich will doch hoffen das keiner so dumm ist, es nicht zu versuchen.Ja, hoffen wir das mal - und wenn die Toleranz und Kulanz und der ganze gute Wille bei den Lieferanten wegen dieser Nicht-Dummheiten aufgebraucht ist, dann jammern wir recht massiv gegen das schlechten Geschäftsgebaren. Super - ähhhhh - dumm.

PS: ich bin so dumm. Ausserdem fände ich es total unsinnig, jemandem, egal ob gerechtfertigt oder ungerechtfertigt, einen Aufwand für fünfzig Euro aufzuladen für ein Teil, das mich 50 Zent gekostet hat.

SlyD
06.08.2010, 14:40
@TrainMen:
Hier wurden ja keine fertigen Komponenten zusammengesteckt - es wurde selbst was drangebastelt und da kann auch was schiefgehen wenn man nicht aufpasst.

Sowas ist aber explizit von Garantieleistungen ausgeschlossen (steht in der Anleitung).


Das wäre in etwa so, als wenn Du z.B. an einen USB Port von Deinem Computer eine selbstgebastelte Schaltung dranhängst und damit den Port irgendwie zerstörst. Beispielweise weil versehentlich 12V an die 5V Versorgung angelegt werden. Das würdest Du dann also auch versuchen zu reklamieren?
;)

MfG,
SlyD