Hallo!
Ich bin hier schon länger im Forum (passiv) tätig und zieh den Hut vor
einigen Leuten hier! Wirklich Respekt für die Bemühungen und die tollen
Ratschläge.
Nun hab ich auch ein größeres Projekt vor und will mich mal erkundigen,
ob mein Vorhaben überhaupt realisierbar ist.
Also ich hab 3 Mikrocontroller und einen EEPROM. Einen für die USB
Anbindung an den PC und für Schaltvörgänge direkt vom PC aus (wie eine
Relaiskarte). Der zweite Pic ist für das weitere Steuern und der dritte
Pic für das Überwachen einiger Signale verantwortlich.
Die zwei letzteren sollen die aktuellen eingelesenen Werte (analog und
digital) in den EEPROM schreiben und auch die Werte für das Steuern aus
diesem beziehen. Ändern will ich die Steuerwerte über den PC mit dem USB
Pic.
Die drei Controller und der EEPROM sollten über I2C verbunden werden.
Auch will ich die aktuell geschriebenen Werte via I2C vom USB Controller
auslesen und am Pc anzeigen.
Ist sowas prinzipiell möglich??
Die Einteilung am I2C Bus würde ich mir wie folgt vorstellen:
USB Pic - Master
Steueurungspic - Slave
Überwachungspic - Slave
EEPROM - Slave
Nur kann ein Slave Pic aus dem EEPROM lesen und ihn auch beschreiben??
Hoffe hier bekomme ich mal Hilfe und es funktioniert dann irgendwie :)
Freu mich schon auf Antworten.
mfg Darkleon
Also es gibt da mehrere Möglichkeiten:
1. Du sendest alle Daten über den Master-Controller und der schreibt die
dir dann ins EEPROM
oder 2.
Du nimmst PICs mit zwei I2C-Schnittstellen und definierst die
EEprom-Schnittstelle als Multimaster.
Ich würde die erstere Lösung bevorzugen (habe mit Multimaster keine
Erfahrung). Hat allerdings den Nachteil, dass die EEprom-Daten über die
doppelte Wegstrecke "geroutet" werden müssen.
Hi!
Danke für deine schnelle Antwort. Ja die erste Möglichkeit klingt
interessant, aber ich muss die Daten ja genau im EEPROM zuweisen, damit
ich jederzeit weiß, welche Daten für was stehen. Wie mache ich das aber
den Master klar, dass z.B.: die ersten Daten in die Speicheradresse x
und die nächsten Daten in die Speicheradresse y kommen sollen?
Und wie funktionert das dann mit Daten auslesen? Denn wenn der zweite
PIC für das Ausführen von z.B.: einem PWM Signal die Werte vom EEPROM
aus der Speicheradresse z auslesen muss, um das PWM Signal einstellen zu
können muss die Anfrage ja an den Master gestellt werden, der muss das
dann auslesen und an den betreffenden PIC weitergeben....
Da wäre dann der Code des Master PICs für alle Aufgaben ja riesengroß
und wahrscheinlich sehr komplex...
mfg Darkleon
Ich würde wohl auch die erstere Version vorziehen. Mit nur einem Master
am Bus ist das Protokoll in meinen Augen einfacher. Achte aber auch
darauf, dass manche PICs nur ein Slave Modul haben (z.Bsp. der 16F88).
Solche PICs können nicht in den Mastermodus geschaltet haben, da bei
Ihnen die Hardware für die I2C Takterzeugung fehlt. Und wenn die Daten
sowieso zum USB-PIC laufen sollen, dann kann der die doch auch gleich
ins EPROM schreiben.
Frage wäre natürlich auch, ob ein größerer PIC mit einer höheren
Taktrate nicht gleich alle deine Aufgaben bewältigen kann.
Sven
Darkleon wrote:
> Hi!>> Danke für deine schnelle Antwort. Ja die erste Möglichkeit klingt> interessant, aber ich muss die Daten ja genau im EEPROM zuweisen, damit> ich jederzeit weiß, welche Daten für was stehen. Wie mache ich das aber> den Master klar, dass z.B.: die ersten Daten in die Speicheradresse x> und die nächsten Daten in die Speicheradresse y kommen sollen?
Du müsstest ein eigenes Protokoll definieren:
so in etwa:
fürs Schreiben:
[ID für EEprom-Schreiben]
[Ziel-Adresse]
[Wert]
[Prüfsumme]
fürs Lesen:
[ID für EEprom-Lesen]
{Quell-Adresse]
Anschließend sendet der Master ein Paket zurück, welches deine Daten
enthält. Am besten auch wieder so wie oben:
[ID für "von EEprom"]
[Wert]
[Prüfsumme]
@ Sven Stefan
Ich wollte ja anfangs nicht, dass der USB PIC (Master) den ganzen
Datenfluss übernehmen muss sondern die Daten die er am Pc anzeigen soll
eben auch vom EEPROM bezieht, da aber die Slave PICs nicht in den EEPROM
schreiben und lesen können muss dass wohl oder übel der Master
übernehmen.
Ein PIC allein kann das leider nicht übernehmen, da ich 14 analoge
Eingänge, 22digitale Eingänge und 25 digitale Ausgänge benötige. Hinzu
kommt noch PWM und solche Sachen....
@ Micha R.
Das ist eine gute Idee. Aber hab ich das richtig verstanden?
Also der Slave muss dem Master erklären, dass er in den EEprom mit der
xyID den Wert z in den Speicher a schreiben soll. Wenn dann ein anderer
Wert in eine andere Adresse gespeichert werden soll, dann eben mit
geänderten Werten.
Wie sieht so ein Protokoll aus??
In etwa so??
Slave sendet zum Master ein W für write.
Master weiß jetzt, dass er was schreiben soll.
Danach die ID des EEPROMS.
Dann die Ziel Adresse und den Wert.
Was ist aber die Prüfsumme?? Wird damit kontrolliert, ob die Daten
richtig abgelegt wurden??
Wenn das alles geschehen ist gibt der Master den Bus wieder frei.
Da ich eben durch meine ganzen Ein- und Ausgänge ein recht hohen
Datenfluss hab bin ich mir nicht einmal sicher ob das funktioniert. Ich
meine von der Geschwindikeit und der Abstimmung, vor allem sollte der
USB Pic dann ja auch noch einige Daten vom EEPROM auch an den Pc senden,
und dann noch für die Slaves lesen und beschreiben. Klingt ziemlich
hektisch.
Vorgestellt habe ich mir die Busgeschwindigkeit mit 400kHz. Ist das
zuwenig oder kann man da keine Pauschalangaben machen.
Die verwendeten Pics wären:
USB - PIC 18F4550
Slave PICs 16F877A
Noch eine kleine Frage zu EEPROM. Die Angaben sind ja meistens so.
256x8 (Speicherkonstruktion) ist das jetzt so, dass ich 256
Speicherzellen mit jeweils 8 bit Länge zur Verfügung habe? Wenn ja was
mach ich mit 10-bit Werten...denn solche habe ich einige an den analogen
Eingängen.
Und kann man auch Werte mit Kommastellen speichern?? z.B.: 10,7??
Sorry, dass ich so viel Frage aber ich beschäftige mich erst seit
einiger Zeit mit PICs und sowas mit I2C und EEPROM hab ich noch
überhaupt mich gemacht.
Bin für jede Antwort dankbar.
mfg Darkleon
Darkleon wrote:
> Das ist eine gute Idee. Aber hab ich das richtig verstanden?
Mal schauen ... ;-)
> Also der Slave muss dem Master erklären, dass er in den EEprom mit der> xyID den Wert z in den Speicher a schreiben soll. Wenn dann ein anderer> Wert in eine andere Adresse gespeichert werden soll, dann eben mit> geänderten Werten.
Nicht ganz.
Die "ID" ist so eine Art Paket-Kennzeichen.
Du sendest ein Datenpaket (mit allen Daten: ID, Adresse, Wert,
Prüfsumme).
Die ID sagt dem Master, was er mit dem Paket machen soll; er soll
nämlich die Daten des Paketes in die enthaltene Adresse schreiben.
Eine weitere ID bräuchtest du z.B. um Messwerte auszutauschen.
> Wie sieht so ein Protokoll aus??
Du musst hier erstmal eine stabile Übertragung zustande bringen.
Also nach dem Motto: Device-Adresse+[r/w]|Byte1|Byte2|...|Byten
Wenn das klappt, sendest du anstatt von Byte1-n deine "Paket-Bytes".
Mit deinen Worten:
1. Master fragt Slave: Hast du was zu senden
2. Slave zu Master: sendet das Paket, ansonsten irgendwas anderes, (eine
ID, die für "nichts" steht)
(3. Master quittiert das ganze mit einem "okay"; oder auch nicht.)
> Was ist aber die Prüfsumme?? Wird damit kontrolliert, ob die Daten> richtig abgelegt wurden??
Die Prüfsumme dient zur Übertragung. Es kann ja passieren, dass
unterwegs mal ein Bit verloren geht.
Angenommen du sendest |1|2|3|6| als Bytes.
Also Prüfsumme nimmst du eine einfache Summenprüfung:
ergibt 12.
Der Master kann dann schauen, ob die Summe der Bytes mit dem Inhalt der
Bytes zusammenpasst.
> Wenn das alles geschehen ist gibt der Master den Bus wieder frei.
So sollte es sein.
> Da ich eben durch meine ganzen Ein- und Ausgänge ein recht hohen> Datenfluss hab bin ich mir nicht einmal sicher ob das funktioniert. Ich> meine von der Geschwindikeit und der Abstimmung, vor allem sollte der> USB Pic dann ja auch noch einige Daten vom EEPROM auch an den Pc senden,> und dann noch für die Slaves lesen und beschreiben. Klingt ziemlich> hektisch.
Du weißt aber, wie oft man einen EEprom beschreiben kann?
Und dass das unter Umständen auch paar ms dauert?
> Vorgestellt habe ich mir die Busgeschwindigkeit mit 400kHz. Ist das> zuwenig oder kann man da keine Pauschalangaben machen.
Kommt auf die Datenmenge und die Störfestigkeit deiner Schaltung an.
> Noch eine kleine Frage zu EEPROM. Die Angaben sind ja meistens so.> 256x8 (Speicherkonstruktion) ist das jetzt so, dass ich 256> Speicherzellen mit jeweils 8 bit Länge zur Verfügung habe? Wenn ja was> mach ich mit 10-bit Werten...denn solche habe ich einige an den analogen> Eingängen.
Ja, so ist das.
Für die 10bit-Werte nimmst du am besten zwei Byte und lässt die übrigen
6 mit Nullen füllen.
Und kann man auch Werte mit Kommastellen speichern?? z.B.: 10,7??
Mit Komma vielleicht nicht. Aber du könntest ein Festkomma definieren.
Also z.B. entspricht 1000 -> 10,00
> Sorry, dass ich so viel Frage aber ich beschäftige mich erst seit> einiger Zeit mit PICs und sowas mit I2C und EEPROM hab ich noch> überhaupt mich gemacht.
Das wird dich auch noch lange beschäftigen ;-)
Verlier nicht den Mut, wenn es ewig dauert, bis du was gängiges auf die
Beine gestellt hast.
Darkleon wrote:
> Ein PIC allein kann das leider nicht übernehmen, da ich 14 analoge> Eingänge, 22digitale Eingänge und 25 digitale Ausgänge benötige. Hinzu> kommt noch PWM und solche Sachen....
16 analog in: 2 * 74HC4051
24 digital in: 3 * 74HC165
32 digital out: 4 * 74HC595
Benötigt vom MC: 5 dig. Out, 1 dig. In, 1 analog In
Peter
Oder aber, da er ja schon I2C benutzen will und SPI und I2C auf den
selben PINs liegen:
16 analog in: 1 * 74HC4067
24 digital in: 3 * PCF8574
32 digital out: 4 * PCF8574
Benötigt vom µC: 4 dig. Out + 1 analog in für den 4067 plus 2 Pins für
I2C.
Sven
Aber mal noch was zum Timing. Wie oft willst du denn die Ein- und
Ausgänge pro Sekunde messen? Und wie oft sollen diese Werte in den EPROM
geschrieben werden? Wie viel Daten soll der EPROM speichern können?
Ich kenne derzeit I2C-EEPROMS nur bis 1024 kBit (das sind 128 kByte).
Wenn du alle 14 analogen 10-Bit Werte einmal pro Sekunde abspeichern
willst, dann sind das 28 Byte pro Sekunde plus die 3 Byte für die
digitalen Eingänge, also 31. Sagen wir mal 32 wegen des Paging bei den
Eproms. Du kannst also in einen 1024kBit Eprom 4096 solcher Datensätze
schreiben, dann ist er voll. Macht rund 68 Minuten bei einer Messung pro
Sekunde. Entsprechend mehr oder weniger, wenn du weniger oder häufiger
messen willst. Reicht dir das?
Falls du mehr willst müsstest du auf Flashspeicher ausweichen. Dann wird
es aber wieder komplizierter...
Sven
Hi!
Wow, wirklich Respekt. Hier tut sich schnell einiges:)
Also mal ein fettes Dankeschön für die Hilfe!
Zu Peters Vorschlag:
Zuest wusste ich ja nicht mal, dass es solche Multiplexer gibt, da ich
neu auf diesem Gebiet bin. Trotzdem bleib ich wahrscheinlich bei meiner
Variante mit den 3 PICs, da der Quellcode bei nur einem Pic sehr komplex
wird und dieser sollte ja keinen Tastimpuls übersehen, oder erst zu spät
die Motoren ausschalten, wenn diese z.B.: die Endschalter erreicht
haben.
@ Sven:
Vielen Dank für Deine Bemühungen und ich denke das mit den Protokollen
klingt logisch (obwohl ich noch nicht wirklich weiß, wie ich diese
gestalten soll, da muss ich mich halt wieder einlesen ;))
Das mit dem EPROM ist so ne Sache. Also ich hab schon vor ca. jede
Sekunde zu messen, nur sollten diese Daten nicht fortlaufend im Speicher
abgelegt werden, sondern überschrieben werden.
Also ich weiße den analogen Messwerten bestimmte Speicheradressen zu und
genau dahin wird immer der aktuellste Wert der jeweiligen Messung
geschrieben, denn die anderen Speicheradressen brauch ich um, z.b.: die
PWM Geschwindigkeit, oder auch um festzulegen, ob der MikroC eine
jeweilige Funktion ausführen soll oder nicht (aktivieren und
deaktivieren). Diese würde ich dann per USB mit dem Masterpic festlegen
und die Slavepics fragen diese dann über den Master ab, um zu wissen,
was sie wann machen sollen und dürfen...Hoffe das war jetzt verständlich
;)
Ich würde die Schreibzugriffe auf den EPROM insofern gering halten, als
dass vorher vom Master überprüft wird, ob der im EEPROM gespeicherte
Wert gleich ist wie der zu schreibende Wert, wenn ja dann müsste
natürlich kein Schreibzugriff erfolgen. Da sollte der EPROM dann
hoffentlich schon länger halten..
Wie definiere ich so ein Festkomma? Hab da nicht wirklich eine Idee.
Nochmals Danke für die zahlreiche Hilfe :)
mfg Darkleon
Also irgendwie klingt das für mich noch etwas unausgegoren. Das was du
an Daten speichern willst und so wie du es beschreibst klingt für mich
eher danach, als dass du deine Daten einfach im RAM des/der PICs
ablegst. Warum willst du denn die ganzen Daten im EPROM ständig abrufen
und speichern? Du hast doch in den PICs einige 100 Bytes frei, welche
man normalerweise für solche Datenzugriffe benutzt.
Du möchtest sicher bei einem Stromausfall die einzelnen aktuellen
Messwerte sicher speichern. Dafür gibt es aber bessere Methoden. Z.Bsp.
kannst du mit einer Diode und einem Elko den PIC dazu bringen, dass er
im Falle eines Stromausfalles noch genug Zeit hat um die relevanten
Bytes sicher in den EPROM zu schreiben. Das würde ich zumindest so
machen.
Während der Laufzeit deines Programmes werden die Daten im RAM gehalten
und dort auch aktualisiert. Die sind dort genau so sicher aufgehoben wie
im EPROM (zumindest solange Spannung anliegt). Und wenn du nur einige
100 Bytes Daten im EPROM sichern willst, dann reicht doch auch der
interne EPROM des PICs. Dazu brauchst du doch keinen externen seriellen
EPROM. Auch solltest du bedenken, dass der EPROM nur ca. 1Mio. mal
beschrieben werden kann. Bei einem Schreibzyklus von einer Sekunde
hättest du das nach ca. 14 Tagen erreicht und dein EPROM würde anfangen
die Daten nicht mehr halten zu können.
Vielleicht könntest du uns dein Projekt ja mal noch ein wenig näher
beschreiben, dann könnten wir dir hier sicher noch bessere Hinweise
geben. Aber nach dem was du bisher uns mitgeteilt hast, würde ich
behaupten, dass dein Projekt mit nur einem PIC problemlos machbar ist
und auch nicht allzu unübersichtlich wird. Ich glaube du unterschätzt
die Leistungsfähigkeit der µC ein wenig. Und mehrere µC miteinender zu
vertüddeln ist nicht unbedingt einfacher, da du für jeden ein Programm
entwickeln musst und sich alle µC auch miteinender verstehen müssen. Das
stelle ich mir echt schwieriger vor, wie ein paar duzend Messdaten zu
erfassen und die Ausgänge zu schalten.
Sven
Sven Stefan wrote:
> Und mehrere µC miteinender zu> vertüddeln ist nicht unbedingt einfacher, da du für jeden ein Programm> entwickeln musst und sich alle µC auch miteinender verstehen müssen.
Da muß ich zustimmen. Die Vernetzung mehrerer MC ist kein
Anfängerprojekt.
Und bei den PIC gibt es hinsichtlich des I2C eine erschwerende
Besonderheit:
Laut I2C-Standard muß ein Slave den SCL-Pin auf Low halten, bis er
seinen I2C-Interrupt behandelt hat. Die Master-Hardware wartet
automatisch solange, es kann also nie einen Datenverlust geben. Der
I2C-Bus wartet immer auf den langsamsten Teilnehmer.
Z.B. die 8051, AVR, ARM7 (Atmel, NXP) machen das.
Aber die PIC haben den I2C-Standard nicht vollständig implementiert,
d.h. wenn nicht innerhalb 90µs (100kHz Bustakt) der Interrupt ausgeführt
wurde, sind die Daten im Eimer.
Peter
Hi!
Konnte mich leider in letzter Zeit nicht melden, da ich einfach keine
Zeit dazu hatte.
Also meine Steuerung wird in einem PKW verbaut und solle folgende Sachen
überwachen und steuern:
PIC 16F877A für die Überwachung:
• Bordnetzspannung
• PC Schaltzustand (Pc im Auto)
• PC Temperatur
• Lüfterbetrieb (3 Lüfter, die bei einstellbaren Temperaturen
einschalten, falls der Lüfter 1 bei erreichen der Temp. 1 nicht
einschaltet, wird der nächste Lüfter eingeschaltet.
• Zündung
• LIMA
• Umgebungslicht (2 Sensoren)
• Endstufe
• TFT (Einschaltung)
• Rückfahrsignal
• TFT Schwenkbewegung
• Handysteuerung
• Zustand der Zentralverriegelung (gesperrt – geöffnet)
PIC 16F877A für die Steuerung:
• PC Schaltung
• Lüftersteuerung
• LED Taster
• Taster
• TFT Fahrbewegung
• TFT Schwenkbewegung
• TFT Betrieb
• Rollo Fahrbewegung
• Heckkamera (AV-Modus TFT)
• Heckklappe
• Taster Spannungsversorgung
• Endstufe
• Fahrlicht
• Standlicht
• Comming Home Funktion
• Going Home Funktion
• Handysteuerung
Diese Werte möchte ich per USB und dem Master PIC 18F4550 verändern
• Ansprechen der Spannungsüberwachung
• Temperaturen der Lüftereinschaltung
• Maximale Temperatur des Systems (Danach wird das System
ausgeschaltet)
• Ausfahrgeschwindigkeit TFT
• Einfahrgeschwindigkeit TFT
• Hochfahrgeschwindigkeit Rollo
• Senkgeschwindigkeit Rollo
• Öffnungsgeschwindigkeit Heckklappe
• Blinkgeschwindigkeit (PWM) LED Taster
• Anzahl der Blinkhäufigkeit des Tasters bei Fahrbetrieb
• Anzahl der Blinkhäufigkeit des Tasters nach Zündungsbetrieb
• Ansprechwert des Lichtsensors
• Überwachung der Endstufe
• Steuerung der Endstufe
• Aktivität des Lichtmodus
• Anzahl der Lüfter
• Anzahl der Einschaltversuche PC
• Aktivität der Einschaltversuche PC
• Hard OFF Zeit des PCs
• Tasterzuweisung
• Wie der Pc ein – und ausgeschaltet werden soll, ( mit Taster-Taster,
Taster-Zündung, Zündung - Zündung, Taster-Absperren, Zündung-Absperren,
Aufsperren-Absperren, Aufsperren-Zündung, Aufsperren-Taster, usw..)
• Aktivierung des TFT
• Anzahl der Schwenkversuche des TFT
• Aktivität der Handysteuerung
• Aktivität der autom. Sperrfunktion des Autos
• Zeitbegrenzung bis die Sperrfuktion aktiv wird
• Aktivität der Comming Home Funktion
• Verwendete Lampen für die Comming Home Funktion (Fahrlicht oder NSW)
• Wann die Comming Home Funktion aktiv werden soll (jedes Mal oder nur
wenn es dunkel ist)
• Aktivität der Going Home Funktion
• Verwendete Lampen der Going Home Funktion (Fahrlicht oder NSW)
• Wann die Going Home Funktion aktiv werden soll (jedes Mal oder nur
wenn es dunkel ist)
Diese Werte sollen nach Verfügbarkeit ausgelesen und am Pc angezeigt
werden
• Temperatur des PCs
• Bordnetzspannung
• Anzahl der aktiven Lüfter
• Aktiver Zustand des TFT
• Aktiver Zustand der Endstufe
• Aktiver Zustand des PC
• Aktiver Zustand der Heckklappe
• Aktiver Zustand der Heckkamera
• Aktiver Zustand der Endschalter des TFT
• Aktiver Zustand der Endschalter des Rollos
• Wert des Lichtsensors
• Aktiver Wert des Fahrlichts
• Aktiver Wert der Zündung
• Aktiver Wert der LIMA
• Geöffnete Türen
So ungefähr hab ich mir das vorgestellt und kann mir jetzt schwer
vorstellen, dass das ein PIC übernehmen kann.
Zwecks EPROM hab ich mir gedacht, dass dieser eigentlich nur die Werte
(Z.B.: PWM geschwindigkeit speichern soll): Diese Werte verändere ich ja
gegebenenfalls via Pc und dann müsste der PIC nur nochmal die aktuellen
Werte einlesen, danach natürlich erst wieder bei der nächsten
Veränderung (PICs bekommen jedesmal einfach einen Reset...kommt ja nicht
so of vor)
Nur wollte ich eben z.B.: wenn der 1. PIC (Überwachung) eine
Unterspannung feststellt sollte dieser dies im EPROM in der
Speicheradresse x mit einer 1 speichern, wenn alles in Orndung ist, dann
steht in dieser Speicherzelle eine 0. Der 2. PIC (Steuerung) liest dies
aus und wird in diesem Punkt aktiv. So hab ich mir das vorgestellt, nur
eben für jede Funktion, damit ich dies auch mit dem Pc auslesen und den
aktuellen Status der jeweiligen Funktionen betrachten kann.
Nur bräuchte ich jetzt eben einen Speicher, der mir diese ganzen
"Laufdaten" aufzeichnet und man über I2C darauf zugreifen kann. Und der
natürlich länger als 14 Tage funktioniert ;) (Danke für den TIPP)
Hoffe das war jetzt nicht allzu lang und ihr versteht was ich meine.
Bin über jede Hilfestellung oder auch Kritik dankbar.
Danke schon im Voraus.
mfg Darkleon
Darkleon wrote:
> Nur bräuchte ich jetzt eben einen Speicher, der mir diese ganzen> "Laufdaten" aufzeichnet und man über I2C darauf zugreifen kann. Und der> natürlich länger als 14 Tage funktioniert ;) (Danke für den TIPP)
Hierfür gibts meherere Möglichkeiten.
Entweder du verbaust nen externen RAM und eine Pufferbatterie oder aber
du nimmst statt dem EEprom einen sogenannten FRAM. Ist zwar teurer aber
dafür kannst du den viel öfter beschreiben. Und das ohne ein Delay wie
bei den I2C-Eeproms. Die Dinger sind pin-kompatibel zum EEprom.
Danke für die schnelle Antwort :)
Wie oft kann man so einen externen RAM beschreiben? Und braucht man
unbedingt eine Pufferbatterie? die 12V Bordnetzspannung wär sowieso
immer auf der Platine.
Und zum FRAM: Wie kann man diesen denn beschreiben? Auch über I2C, weil
du eben geschrieben hast, dass es kein Delay gibt?!?
Wie oft kann man denn diese Dinger beschreiben??
Hab noch nie was davon gehört (zumindest vom FRAM). Hoffe ich frag nicht
allzu "dumm" in der Gegend herum, aber ich muss mich erst mit all den
elekrtonischen Bauteilen und ICs vertraut machen, da ich kein gelernter
Elektroniker oder sonst was in der Richtung bin, mich aber seit einiger
Zeit damit beschäftige und auch das Projekt über die Bühne bringen will
:)
Danke nochmals.
mfg Darkleon
Darkleon wrote:
> Wie oft kann man so einen externen RAM beschreiben? Und braucht man> unbedingt eine Pufferbatterie? die 12V Bordnetzspannung wär sowieso> immer auf der Platine.
Ein Ram verliert seine Daten bei Spannungsausfall. Deshalb die
Pufferbatterie.
> Und zum FRAM: Wie kann man diesen denn beschreiben? Auch über I2C, weil> du eben geschrieben hast, dass es kein Delay gibt?!?
Ist exakt gleich vom Protokoll her wie die EEproms. Nur dass der Vorgang
schneller abgeschlossen ist.
> Wie oft kann man denn diese Dinger beschreiben??
bis zu 10 Billionen mal.
WOW, danke für die Antwort.
Das mit dem Spannungsabfall beim RAM wäre nicht so schlimm, da sich die
PICs ja sowieso das selbst wieder beschreiben und ein Spannungsabfall
erst eintreten würde, wenn ich die Batterie vom Auto ausbaue ;)
Die sind aber sicher billiger als so nen FRAM!??
Beschreibt man einen externen RAM auch über I2C ?? und gibts da auch
eine Einschränlung oder sind die immerwieder beschreib und löschbar??
Nochmals Danke für den wirklich guten TIPP :)
mfg Darkleon
Darkleon wrote:
> WOW, danke für die Antwort.>> Das mit dem Spannungsabfall beim RAM wäre nicht so schlimm, da sich die> PICs ja sowieso das selbst wieder beschreiben und ein Spannungsabfall> erst eintreten würde, wenn ich die Batterie vom Auto ausbaue ;)>> Die sind aber sicher billiger als so nen FRAM!??>> Beschreibt man einen externen RAM auch über I2C ?? und gibts da auch> eine Einschränlung oder sind die immerwieder beschreib und löschbar??>> Nochmals Danke für den wirklich guten TIPP :)>> mfg Darkleon
Also für externe Rams habe ich keine Empfehlung. Allerdings bringen
einige Pics (PIC18) einen Port zur Verwendung eines ext.
Speicherinterface mit (8/16 Bit).
Beschreiben kannst du einen RAM sooft du lustig bist.
Ein FRAM kostet glaube so um die 10 €.
Kannst auch probieren, ob du bei R.A.M.T.R.O.N ein Sample bekommst.
Gruß
Michael
Also nur weil da jetzt viel steht, heißt das noch lange nicht, dass das
dein 18F4550 nicht auch alleine schafft. Der hat schließlich 32kByte
Flash und 2kByte RAM (wobei davon einiges für USB verbraucht wird). Mit
den schon genannten Hinweisen für das analoge Multiplexen und die
digitalen Busexpander sollte die Signalverarbeitung kein Problem
darstellen, da es sich zeitlich auch alles im Rahmen bewegt.
Ich sehe allerdings bei dieser Anwendung ein ganz anderes Problem: Du
wirst dir viel mehr Gedanken über die Signalgewinnung an den
beschriebenen Einheiten machen müssen als über die Signalverarbeitung im
PIC. Außerdem wirst du enorme Probleme mit der Filterung der
Boardspannung haben, da die Spannung in einem PKW alles andere als
stabil und EMV verträglich ist. Mit unerwünschten Nebeneffekten solltest
du also von Anfang an rechnen und diese bei der Schaltungsplanung mit
einbeziehen.
Und um noch mal auf den Speicher zurück zu kommen. Wir haben ja schon
festgestellt, dass für die reine Speicherung der Messwerte 32 Bytes
völlig reichen. Wenn du nun noch einmal 100 Bytes für die
Programmausführung dazu rechnest und du deine Konfigurationswerte
(welche du nur bei einer Änderung deiner Einstellungen) im EEPROM des
PICs ablegst, dann hast du immer noch genügend Luft im 4550. Hast du
denn mal überschlagen wie viel Bytes du tatsächlich für dein Vorhaben
benötigst? Und möchtest du die Daten nun mitloggen oder geht es dir nur
um die Speicherung eines momentanen Zustands? Das solltest du von Anfang
an trennen. Laufzeitvariablen gehören in den RAM des PICs und Logdaten
auf einen externen EEPROM oder Flash. Konfigurationsdaten die auch nach
Spannungsausfall benötigt werden kannst du im EPROM des PICs ablegen.
Aus meiner Sicht ist das Projekt mit einem 4550 bei 20 MHz problemlos
machbar auch wenn es dir im Moment anders erscheinen mag.
Sven
@ Micha R.
Danke für deinen tollen TIPP, das ist wirklich eine tolle Alternative
und wahrscheinlich auch die einzig (für mich) umsetzbare Lösung.
@ Sven
Mir gefällt dein Optimismus gut, vor allem auch die Aussage, dass das
der 18F4550 auch alleine schafft, da ich mir auch dadurch einiges an
Geld und "I2C-Nerven" sparen würde :)
Also die Signalgewinnung hab ich schon hinter mir, da ich alle
relevanten Kabel im Auto schon verlegt und angeschlossen habe. Nur wie
ich diese auf mikroC Pegel "transformiere" mache ich mir derzeit noch
Gedanken.
Das mit der Spannungsversorgung ist eigentlich auch kein Problem, da für
den Pc-Betrieb ein eigenes Netzteil in Auto kommt, das mir ein absolut
geregeltes und gefiltertes Output gibt mit 12V, 5V und 3,3V. An diesem
habe ich noch genug Reserven, sodass ich die mikroC Steuerung auch
versorgen kann.
Eine Berechnung des Speichers hab ich noch nicht gemacht, da ich immer
von einem externen Speicher mit genug Reserven ausgegangen bin, um
eventuelle Erweiterungen später noch hinzuzufügen.
Ich kann mir aber wirklich schwer vorstellen, wie das der 18F schaffen
soll. Immerhin betreibe ich für das TFT, das Rollo und die Heckklappe 5
Servomotoren aus dem Modellbau. Diese müssen immer exakt auf deren
Endschalter stehenbleiben. gleichzeitig darf der mikroC keinen
Tastimpuls von 5 Tastern "übersehen" und sollte bei den jeweiligen
Inputs auch so schnell wie möglich reagieren...z.B.: Umgebungslicht
Zusätzlich will ich ja die veränderbaren Werte über ein Menü, das ja
auch der 18F aufbereiten muss am Pc eingeben können und auch im
laufenden Betrieb soll der ja immerwieder die Laufzeitdaten an den Pc
übermitteln.
Mittloggen will ich mal zur Zeit nichts, sondern nur die Variablen für
den jeweiligen Zustand eines Signals oder einer Komponente speichern.
So eine Software für nur einen PIC trau ich mir (momentan) nicht zu.
Ach ja und eine Art Relaikarte, will ich auch noch realisieren. Also
Ausgänge per Pc schalten....
Tut mir leid Sven, aber ich kann mir das alles nicht vorstellen, wäre
aber froh, wenn Du mich eines besseren Belehrst :)
So long,
Darkleon
Na dann rechnen wir doch mal etwas nach. Ein PCF8574 (8-Bit I2C I/O
Busexpander) benötigt für das Auslesen bzw. das Schalten seiner 8
Aus-/Eingänge 18 Bit (8Bit Adresse, 8 Bit Daten, 2x ACK) * 10µs (der
läuft leider nur mit 100kHz I2C Takt) 180µs wir runden mal auf 200µs =
0,2 ms auf. Bei 8 solcher ICs für Ein- bzw Ausgänge wären das 1,6ms.
Wenn du bei den ICs für die Eingänge die Interruptleitungen benutzt,
könnten dir Eingänge also innerhalb einer Millisekunde abgefragt werden
und die Ausgänge umgeschaltet werden. Ein 20MHz getakter PIC kann in
dieser Zeit 4000 Befehle ausführen. Da ist also noch Luft.
Der ADC benötigt pro Messung ca. 100µs. Das macht bei 16 Eingängen auch
ca. 1,6ms. Hier musst du allerdings pollen, da der ADC keinen Interrupt
bei einer Veränderung des Signals auslösen kann (er misst ja auch immer
nur eine der 16 Leitungen). Allerdings könntest du jeden Eingang 500 mal
in der Sekunde messen und entsprechend auswerten. Die Messung selbst
läuft über Interrupt. Also immer wenn der ADC fertig ist mit messen,
gibt er Bescheid und du wertest die Messungen aus und schaltest den
Eingang weiter. Wenn dann der nächste Timerinterupt kommt startest du
die nächste Messung für den vorher umgeschalteten Eingang (aquisition
time im Auge behalten!).
Auf Helligkeitsschwankungen könntest du also innerhalb 2ms regieren.
Ebenso auf Veränderungen an den digitalen Eingängen. Deine
Reaktionszeiten sind aber nicht in erster Linie durch die
Befehlsabarbeitungsgeschwindigkeiten des PICs definiert (der sollte das
schaffen) sondern durch deine Buslaufzeiten am I2C bzw. die Messzeiten
des ADC! Und da wirst du auch nicht schneller, wenn du das auf mehrere
PICs aufteilst, da diese auch an diese Zeiten gebunden sind.
Bleibt nun noch USB. Da kenne ich mich aber leider noch nicht aus.
Solange du aber nur Text an deinen PC sendest, sollte sich das zeitlich
auch in Grenzen halten. Schwieriger könnte ich mir vorstellen, ist es
ganze Blöcke möglichst schnell an den PC zu senden. Wobei ich nicht
weiß, ob der PIC in der Lage ist einen ganzen Datenblock im Hintergrund
per USB zu senden bzw. zu empfangen oder ob er auch jedes Byte durch das
W Register jagen muss. Das werde ich mir mal anschauen müssen....
Ach ja und PWM für die Motoren. Da muss ich aber passen. Mit PWM habe
ich mich noch nicht beschäftigt. Da gibt es aber sicher auch ICs, welche
sich über I2C steuern lassen und dir den ganzen PWM Kram und die
Brückenumschaltung abnehmen, so das du nur noch kurze Steuerbefehle an
diese ICs senden musst.
Der zeitlich langsamste Teil ist die Menüsteuerung und die
Tastaturabfrage für diese Steuerung. Hier reicht es völlig die Tasten
alle 10ms abzufragen und die Daten bei einer Änderung ans Display zu
senden.
Aber Überschlag es ruhig mal selbst und probier doch erst mal einen
Versuchsaufbau. Dann wirst du ja sehen ob das klappen könnte oder ob du
mit deiner 3 PIC Lösung besser fährst.
Gruß
Sven
Also ich finde es ein schönes Projekt.
Sicher schafft auch ein einziger PIC, aber das Verwenden mehrerer hat
eben den Vorteil, dass der Code pro Controller nicht ganz so groß wird
und es entfällt die Hardware für MUXer und Schieberegister.
Die Geschwindigkeit auf dem BUS wird allerdings wirklich ein
Flaschenhals.
Da der USB-Controller der Master sein soll, muss er immer erst eine
Anfrage an die Slaves stellen und anschließend die Antwort abwarten.
Dies muss immer zyklisch geschehen.
Bezüglich des Speichers wäre da ja noch die Möglichkeit ein SD
Steckplatz zu verwenden. SD Karten sind sehr günstig und über SPI
einfach anzusprechen. Die Wiederbeschreibbarkeit sollte auch nicht das
Problem sein, vorallem, da man bei z.B. 1GB Speicher ja nicht immer auf
den gleichen Speicherplatz zugreift, sondern rotieren kann.
Hallo!
@Sven
Ja das ganze ist jetzt (für mich) eher vorstellbar. Nur das PWM Signal
wird glaub ich schwierig zum umsetzen sein, denn wenn ich dieses auch
multiplexe, dann ist noch immer das Problem, dass z.B.: zwei Motoren mit
einem fixen PWM-Signal fahren, der dritte Motor dann plötzlich gebraucht
wird und dieser mit einem variablen PWM-Signal betrieben werden muss und
dann vielleicht noch gleichzeitig der 4. Motor, in der zwischenzeit
sollten die ersten beiden z.B.: wieder stehenbleiben. Da das total
unterschiedlich auftreten kann, kann ich auch ncihts über eine
Zeitsteuerung machen.
Ich bräuchte also einen PWM-Multiplexer, der mir das PWM-Signal in der
aktuellen Geschwindigkeit beibehält, obwohl ich das PWM-Steuersignal
weggebe. Vor allem hab ich am PIC ja nur 2 PWM-Ausgänge und bräuchte
dann 5 davon....
Das mit USB denke ich wird kein Problem, da ich meistens nur einzelne
Zahlen an den Pc sende und der mir das dann umrechnet oder eben die
gewünschte Aktion ausführt.
@Chris
Danke für Deinen Tipp. Davon hab ich auch schon gelesen und diese
Variante wäre auch interessant, allerdings nur, wenn ich mehrere PICs
verwende, da ich sonst (bei nur einem PIC) die "Standardwerte" in einen
EPROM schreibe und mir der PIC diese ausliest. Denke mal, dass wenn das
System irgendwann mal richtig läuft ich nur sehr selten Werte ändern
muss. (Vielleicht 1x die Woche)
Weiß hier jemand, ob man das Problem mit den PWM-Signalen mit
Multiplexern (oder sonst was) lösen kann, oder brauch ich einfach
mehrere PWM-Steuersignale??
Hoffe ihr habt mich verstanden und ihr könnt mir helfen.
Danke schon im Voraus.
mfg Darkleon