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
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
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.
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?
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.
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
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
@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
Mit wieviel kHz betreibst Du die PWM. Und was für eine Auflösung benötigst Du?
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.