Forum: Mikrocontroller und Digitale Elektronik Zwei PICs verbinden


von Bernhard Gebert (Gast)


Lesenswert?

Hallo alle miteinander,

ich weiß, dieses Thema wird immer mal wieder behandelt, aber für meinen
speziellen Fall habe ich keine konkrete Antwort gefunden.

Mein 18F4431 reicht rein speichermäßig nicht für seine Aufgabe (4-Fach
Schaltnetzteil mit Display) aus. Deshalb möchte ich die
Displayansteuerung (Textkonstanten...) und die Tasterauswertung in
einen "kleinen" 16F877 (die sind halt billig in EBay) auslagern.

Ein UART des großen PIC ist bereits belegt. Die Datenmengen sind klein,
die Entfernung auch (alle 100 ms 20 bytes, 20 cm).

Leider habe ich von seriellen Schnittstellen keine Ahnung und weiß also
nicht, wie ich das am besten lösen kann.
SPI? Über normale Port-Pins? Mit Interrupt-Pins?

Danke im Voraus,
Bernhard

von bernd (Gast)


Lesenswert?

Das synchrone-seriele Interface sollte doch alle Möglichkeiten bieten,
die Du brauchst. Ich kenne den PIC18F4431 zwar nicht, aber die meißte
PICs haben es.

Und 16kByte reichen nicht für ein paar Texte und die SW. Hat der
16F877 nicht auch nur 8k x 14Bit?

Eigentlich sollte man mit 8000 Instruktions doch ein Schaltnetzteil
programmieren können.

Br,
Bernd

von Bernhard Gebert (Gast)


Lesenswert?

Hallo Bernd,

danke für deine Antwort, der PIC hat SSI. Gibt es schon fertige Quellen
für Datenaustausch oder ähnliches?

Bis vor sechs Wochen habe ich steif und fest behauptet, das
Progrämmchen würde in einen 8k-Speicher passen.
Leider haben mir
* Kurzschluss- und Leerlauferkennung
* Identifikation eines angeschlossenen Akkus
* Temperaturmessung undundund
da einen Strich durch die Rechnung gemacht.

Die Menüführung (mit Display-Ansteuerung) hat ungefähr 2k und ich wäre
halt froh, wenn ich die schon mal vom großen PIC weg hätte.

von bernd (Gast)


Lesenswert?

Vielleicht wäre es klüger sich einfach einen PIC18 mit mehr Speicher zu
nehmen. Die gibt's in kleinen Schritten bis 128k.

Wie viele Pins brauchst Du denn?

von Bernhard Gebert (Gast)


Lesenswert?

Hallo Bernd,

du hast vollkommen Recht, ein größerer Speicher wäre die beste Lösung
für mein Problem. Und die 44 Pins reichen mir (mehr schaden nie, auf 2€
hin oder her kommts nicht an).

Leider benötige ich in jedem Fall die 2*4 Hardware-PWM, sonst bekomme
ich massive Probleme mit dem Layout. Und mit denen habe ich keinen
anderen gefunden.

von Peter Dannegger (Gast)


Lesenswert?

Wie wärs, die ganzen Displaytexte und andere Konstanten in einen EEPROM
auszulagern (24C32 ... 24C512).

Für das Single-Master-I2C findest Du bestimmt genügend Codebeispiele.


Peter

von Bernhard Gebert (Gast)


Lesenswert?

Hallo Peter,

ich habe mal eine professionelle EEProm-Ansteuerung gesehen. Schreiben,
rauslesen zum kontrollieren, wenn nicht gültig Bereich im EE nicht mehr
verwenden; Lesen, auf Gültigkeit überprüfen, wenn ungültig durch
Default-Werte ersetzen.

Selbst stark vereinfacht spart das nicht mehr viel.

MfG,
Bernhard

von Peter Dannegger (Gast)


Lesenswert?

@Bernhhard,

ne, so meinte ich das nicht.

Du brennst alle Daten einmalig in den EEPROM und die Anwendung hat nur
eine Leseroutine. Geschrieben wird da nichts mehr.

Wenn Du Angst hast, daß der PIC mal verrückt spielen könnte und trotz
fehlender Schreibroutine den EEPROM zerhauen könnte, es gibt auch
EEPROM mit einem Write-Protect-Pin, z.B. AT24C512: WP an VCC legen.

Du brauchst also nur eine Leseroutine (vorzugsweise sequentielles
Lesen) und die ist sehr klein.


Peter

von bernd (Gast)


Lesenswert?

Mit wieviel kHz betreibst Du die PWM. Und was für eine Auflösung
benötigst Du?

von Bernhard Gebert (Gast)


Lesenswert?

Hallo,

@Peter
Stimmt, an eine so einfache Lösung habe ich noch nicht gedacht. Ob es
reicht muss ich noch durchrechnen. Selbst 300, 400 Bytes (mehr
Konstanten habe ich nicht) sind ja nicht wirklich viel im Vergleich zum
Programmspeicher.

@Bernd
Bisher verwende ich ~150 kHz bei 8 bit Auflösung. Mit der Frequenz
könnte ich sicherlich auf 100 kHz runtergehen (70 haben nicht mehr
gereicht), die Grenzen für die Pulsweite liegen bei 5% und 95%, die
Auflösung muss mindestens 8 bit betragen.

Viele Grüße,
Bernhard

von Schoaschi (Gast)


Lesenswert?

Wieviele freie Pins hast du denn? Bei 9 freien Pins würde sich zb eine
parallele Übertragung ausgehen(8Datenbits +1xClock). Hier kannst du dir
ein Protokoll ausdenken und schickst einfach die Daten zum anderen
Controller hinüber, welcher die Displayansteuerung übernimmt.

Du könntest dir halt auch mit 2 Leitungen eine serielle Synchrone
übertragung selber stricken. Oder du benutzt SPI. Die PICs können ja
auch als Slaves arbeiten. Also verwende den PIC16 als Slave und schick
ihn über SPI die daten.

von Geri (Gast)


Lesenswert?

Hallo

Eine passende Möglichkeit für dein Problem wäre meiner Meinung nach
auch die Verwendung des I2C-Busses. Die meisten der Pics unterstützen
auch den I2C-Slave-Mode. Bzgl. Code-Bibliotheken musst du halt ein
wenig suchen (sind recht rar:).

Wenn du allerdings diese Hürde geschafft hast, dann lassen sich damit
auch viele andere Anwendungen durch Modularisierung sehr vereinfachen.
Man kann dann sogar mehrere Pics auf einem Bus betreiben.

Beste Grüsse

Geri

von Bernhard Gebert (Gast)


Lesenswert?

Hallo Geri und Schoaschi,
danke für die Infos über serielle Schnittstellen. Da ich aber keine
Ahnung von soetwas habe, muss ich mich zuerst mal in die Thematik
einlesen.

von Schoaschi (Gast)


Lesenswert?

hm... Prinzipell ist das ja nicht schwierig. Du musst zuerst nur in den
registern halt die richtigen Bits setzen. Im Datenblatt solltest du das
ganze unter MSSP finden.
Die Register wären:
SSPSTAT
SSPCON1
SSPCON2
SSPBUF
SSPADD (wenn du I²C verwendest)
ICh kenne das Datenblatt deines PICs nicht, aber bei meine, PIC18F2220,
ist es ab Seite 157 sehr schön beschrieben wie das ganze funzt. Der
Vorteil wäre wenn du es mit diesen Bussen machst, dass du auch gleich
Interrupts hast und nicht immer pollen musst.
Ich möchte jetzt noch schnell an die Seite:
http://www.fernando-heitor.de/
verweisen. Ich finde die Seite ziemlich spitze und da werden dir sicher
mehr Leute helfen können.

Ich hoffe ich konnte etwas helfen und nicht nur verwirren ;-)
Hier noch ein Link zu einer Erklärung des SPI-Busses:
http://www.mct.de/faq/spi.html

Ich wünsche fröhliches basteln und schau erst wieda am Mittwoch rein,
da ich mir morgen die Laser-Messe gebe :D.(vl gibts ja ein paar Laser
gratis :D)
Ich hoffe das du dann schon erfolgreich warst.

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.