- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Alter Motor-Controller mit PIC16F84

  1. #1

    Alter Motor-Controller mit PIC16F84

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe hier einen alten Motor-Controller, vermutlich aus dem Jahr 2000, mit einem PIC16F84 vor mir liegen. Die Software auf dem Controller reagiert auf ein bestimmten Protokoll eines Two-Line-Bus-Systems. Ich kann ihn somit ansteuern. Da mehrere Motor-Controller an einem Bus hängen können reagieren sie alle auf unterschiedliche Adressen im Bus-System. Hier ein Auszug aus dem Schaltplan des Motor-Controllers:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_1881 - Kopie.JPG
Hits:	17
Größe:	87,5 KB
ID:	26449

    Wobei die linke Seite der Pins 1, 2, 4 und P an 5V hängen und die rechte Seite von 1, 2 und 4 an RA1, RA3 und RA2 angeschlossen sind. Der rechte Pin von P ist an MCLR des PIC angeschlossen. Wenn ich das richtig verstehe sollte man durch verbinden dieser Pins die Adresse auf die der Controller reagiert einstellen können. Auf bereits adressierten Controllern sind diese Pins aber nicht mit einer Lötbrücke oder ähnlichem verbunden. D. h., dass der Controller die Adresse irgendwie einlernen muss, während die entsprechenden Pins verbunden sind. Aber wie bringe ich den PIC dazu das zu tun? Durch Verbinden von MCLR mit 5V, also den zwei P-Pins, passiert leider nichts. Jetzt habe ich herausgefunden, dass PICs durch anlegen einer Programmierspannung von ca. 13V an MCLR in den Programmiermodus gehen. Ist es möglich, dass der PIC in diesem Modus das an RA1 bis RA3 anliegende Signal einliest und abspeichert? Oder funktioniert sowas komplett anders?

    Ich freue mich auf eure Antworten.

    MfG
    Der Eisvogel

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Im Programmiermodus (13V an MCLR) wird der Speicher des PIC seriell über RB6/RB7 beschrieben. Das macht man normalerweise nicht händisch sondern mit einem Programmer, um eine neue "Firmware" in den PIC zu flashen. Das hat also mit deinem Adressieren über RA1 bis RA3 nichts zu tun. Das Adressieren über RA1 bis RA3 ist ein Teil der Anwendung, die auf dem PIC läuft.

    Wenn die Adresse über RA1 bis RA3 nach einem MCLR - Reset eingelesen werden soll (und wahrscheinlich im EEPROM gespeichert), dann muss der MCLR ausgeführt werden -> MCLR kurz auf Masse ziehen.

    Den Quellcode hast du wahrscheinlich auch nicht, oder? Sonst könnte man die Funktion reverse engineeren. Leider sieht man den Rest der Schaltung nicht, wie der MCLR verschaltet ist. Also mal spekulativ angenommen, dass der MCLR Pin des PIC über einen Widerstand auf Masse liegt, dann wird der Reset ausgeführt, wenn der Jumper gezogen wird. Also mein Vorschlag zum ausprobieren: Adresse jumpern, P-Jumper ziehen, P-Jumper stecken, ein paar Sekunden warten, Adressjumper entfernen und gut ist. Ist der P-Jumper gesetzt (und bleibt gesetzt!) und der MCLR Pin liegt auf 5V, dann sollte der PIC normal arbeiten.

    Gruß
    witkatz

  3. #3
    Hallo witkatz,

    vielen Dank für deine Antwort. Ich hab das mal eben probiert, aber leider zeigt dieses Vorgehen keine Veränderung.

    Hier mal der ganze Schaltplan, so wie er überliefert ist:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_1883 - Kopie.jpg
Hits:	13
Größe:	60,9 KB
ID:	26452

    Leider habe ich nur den Schaltplan, nicht aber den Source-Code. Der ist leider nicht mehr zu haben.

    MfG
    Der Eisvogel

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Der P-Jumper zieht wirklich nur den MCLR auf 5V, damit im laufenden Betrieb kein Reset möglich ist. Zum Programmieren mit einem Programmer muss der Jumper gezogen werden, ansonsten bleibt er drauf.
    Über die Adress-Jumper an RA1 bis RA3 wird wohl die Adresse eingestellt. Wie kommst du darauf, dass der "Controller die Adresse irgendwie einlernen muss"? Mir fehlt in der Schaltung ein Auslöser für das Einlernen. Passiert das vielleicht automatisch durch Power-on-Reset? Also aus, Adresse jumpern, Ein/Aus, Adressjumper entfernen, einschalten und alles ist gut? Oder sind die Adressjumper invertiert, alle haben jetzt Adresse 7 und laufen gemeinsam im Testlauf? Oder kommt über den Bus ein Adressier-Befehl?
    Ohne eine Funktionsbeschreibung ist das alles nur geraten...

  5. #5
    Hallo witkatz,

    ich habe hier ein Set Motoren, die von 1 bis 6 bereits durchadressiert sind. Diese lassen sich durch Befehle im Bussystem ansprechen. Die Befehle von 0x00 bis 0x07 gelten für alle Motoren. Ab 0x08 stehen die letzten drei Bits für den zu addressierenden Motor. Da reagiert also nur noch jener, der mit der entsprechenden Adresse eingelernt wurde. Wenn ich den Befehl 0x52 (0b01010010) über das Bus-System schicken, dann dreht sich Motor zwei (0b010) nach links. Die anderen Motoren, die ich hier noch liegen habe befinden sich alle im Testlauf. Lege ich auf die Daten- oder Taktleitung ein Null-Signal, dann dreht der Motor sich entsprechende links oder rechts rum. D. h., die Motoren reagieren noch gar nicht auf das Bus-System. Bei den bereits adressierten Motoren sind die Jumper alle nicht gebrückt. Deswegen gehe ich davon aus, dass man es irgendwie einlernen muss, sonst würden sie ja nicht wissen auf welche Adresse sie reagieren müssen. Wenn ich die Jumper also setze und den Controller anschalte, passiert aber leider nichts.

    Gibt es bei so einem PIC eventuell die Möglichkeit den Speicher wieder auszulesen um somit an den Source zu kommen?

    MfG
    Der Eisvogel

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Zitat Zitat von Der Eisvogel Beitrag anzeigen
    Wenn ich die Jumper also setze und den Controller anschalte, passiert aber leider nichts.
    Was passiert wenn du genau das tust, danach ausschaltest, Jumper ziehst und wieder einschaltest?
    Meine Idee war, dass das Adressieren vielleicht nach dem Power-On-Reset automatisch geschieht.
    Ich nehme an, dass die Befehlsliste keinen Adressier-Befehl enthält?

    Ja, man kann versuchen den Programmspeicher mit einem Programmer auszulesen und zu disassemblieren, wenn Code Protection nicht aktiviert wurde.

  7. #7
    Hallo witkatz,

    mein derzeitiges Vorgehen:
    1. Plus und Minus des Motor-Controllers an GND hängen (zum vollständigen Entladen der Elektronik
    2. Jumper setzen
    3. Controller anschalten
    4. Kurz warten
    5. Controller ausschalten
    6. Jumper ziehen
    7. Controller einschalten


    Wenn ich diese Schritte durchführe schaffe ich es, dass der Controller nicht mehr auf den Testlauf reagiert, aber auch auf keine anderen Befehle über den Bus. Es gibt ein paar Befehle, worauf er dann doch reagiert, aber da geht er dann wieder zurück in den Testlauf. Es scheint also so, als ob es doch einen Befehl geben muss, der dem Controller quasi bestätigt, dass er jetzt eine neue Adresse hat. Der Befehl scheint aber nicht gelistet zu sein. Also heißt es wohl ausprobieren. Oder hast du noch eine andere Idee?

    PS: Was mir grad noch einfällt, dass dieses Prozedere nur jedes zweite Mal funktioniert.

    MfG
    Der Eisvogel

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Da ist noch der Endschalter, der vielleicht noch eine Rolle spielen könnte, sonst habe ich keine Idee mehr. Möglicherweise wurde die Adresse hart codiert?
    Vielleicht hat jemand so was ähnliches schon mal realisiert und könnte einen Tipp geben, wie man am besten eine PIC Adressierung für Busbetrieb vornimmt. Ansonsten ist es wohl kein allgemeines PIC Thema mehr...

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,

    Also allgemein üblich wäre, dass man die Jumper steckt und gut ist.

    Der µP fragt die Pins dann bei jedem Reset ab und hat so seine Busadresse.

    MfG Peter(TOO)

  10. #10
    Hallo,

    also es scheint auch mit dem Endschalter zusammenzuhängen. Wenn ich mein Prozedere durchführe und dann den Endtaster einmal betätige, dann reagiert der Controller auf bestimmte Befehle. Aber sobald ein anderer Befehl kommt, ist er wieder im Testlauf, genauso wie nach dem Neustart. Aber die Befehle haben nichts mit den eigentlichen Befehlen der Befehlsliste zu tun. Da das Bus-System nicht ganz taktabhängig, sondern auch zeitabhängig ist, könnte es sein, dass das Quarz nicht mehr mit der ursprünglichen Frequenz schwingt? Wie kann ich das am besten nachmessen?

    MfG
    Der Eisvogel

Ähnliche Themen

  1. Eure Meinung: DC Motor mit integriertem Controller
    Von Unregistriert im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 19.06.2013, 21:13
  2. Fujifilm: Preisgünstigere Touchscreens mit alter Fototechnik
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 13.03.2013, 08:30
  3. PIC16F84 mit externem RAM-Baustein W24257AK-15
    Von Goblin im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 03.02.2005, 22:45
  4. [ERLEDIGT] Schaltung von Conrad Nachbauen mit PIC16F84 Hilfe
    Von Gangelie im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 17.01.2005, 07:38
  5. Pic16F84 mit 20MHz?
    Von Klick_here im Forum PIC Controller
    Antworten: 8
    Letzter Beitrag: 12.05.2004, 08:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen