Mit dem (seriellen ?) RP6-Programmer kenn ich mich leider nicht aus.
Druckbare Version
Mit dem (seriellen ?) RP6-Programmer kenn ich mich leider nicht aus.
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
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
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:
lgCode:#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;
}
Michi
Hallo,
ich hab jetzt mein Testprogramm noch erweitert, jetzt werden auch alle ADCs als I/Os definiert und auf high gesetzt:
Dann habe ich wieder die anliegende Spannung gemessen - bei allen ADCs ziemlich genau 5V.Code:#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;
}
Wenn's nicht JTAG ist, was könnte dann die Fehlfunktion - nur auf PORTC wohlgemerkt - verursachen? :-k
lg
Michi
Hi RobotMichi,
leider kann ich kein Bascom. 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.
@Michi:
Manchmal mißt man mit Messgeräten auch "Mist".Zitat:
Wenn's nicht JTAG ist, was könnte dann die Fehlfunktion - nur auf PORTC wohlgemerkt - verursachen?
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
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
@Michi:
Da bleiben nur 2 Möglichkeiten, wenn da sonst keine Hardware dranhängt:Zitat:
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.
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
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