Hallo Forummitglieder Ich bin Daniel 24 Jahre aus dem Norden und besuche die Technikerschule in Lübeck. Da im 2 Jahr der Ausbildung ein Mikrocontroller Projekt ansteht bin ich schon am überlegen und Planen. Der Controller ist vorgegeben "NXP 8051" und bestellt. Datenblatt ist hier zu finden : http://www.c51.de/c51.de/Dateien/Humerboards/NLB_LPC935.pdf Nun zum Projekt, ich plane eine Mischanlage für Getränke zu bauen. Die Gefahren und das beachten von Lebensmitteln usw is mir klar und werd ich beachten. Auf den Bildern habe ich die einzelheiten genauer gezeigt. Das ganze soll in einen alten Server Big Tower eingebaut werden und bekommt einen TFT und ein PII PC System für die Software " Windows " Der Stick soll per USB angeschlossen werden und die externen Spannungen wollte ich aus dem PC Netzteil hohlen. Controller wird ja über USB betrieben. Die Software C++ für den Controller werd ich mit Ride 7 schreiben die Software für Windows mit Borland Builder. Die Software soll auf dem LCD Angezeigt werden und die Bedienung soll per Taster " Controller "oder Maus "PC" erfolgen. Die Mechanische Seite sollen 2 Behälter über Kopf stehen so das keine Pumpe benötigt wird. Dosiert werden soll per Magnetventil "Timer". Es soll je nach gewählten Mischungsverhältniss das Glas gefüllt werden. Das Mischungsverältniss bestimmt man per Poti " Controller " oder per Software " PC " . Ich hoffe man kann sich nun vorstellen wie ich mir das so gedacht habe, sonst einfach fragen. Mich würde interessieren ob jemand ein Problem in dem plan sehen kann oder wie schwer das paralell arbeiten von PC und Mikrocontroller zum bedienen der Software ist. Ich werde sicher noch einige fragen haben aber will erstmal selber bischen schauen was man machen kann. Sicher is im Forum einiges zu finden ;-) MFG Daniel
Daniel Grzesik schrieb: > wie schwer das paralell arbeiten von PC und > Mikrocontroller zum bedienen der Software ist. Ich würd mal sagen, der PC ist vollkommen überflüssig. Niemand will erstmal ewig warten, bis der PC gebootet hat, um sich nen Drink zu mixen. Peter
> Ich würd mal sagen, der PC ist vollkommen überflüssig.
Das kann ich mir gut vorstellen aber habe keine ahnung wie schwer es ist
ein kleines Display zu programmieren und das kann man später noch
machen. Der PC ist aber auch ein muss bei dem Schulprojekt. Wir sollen
den PC und den Controller zusammen betreiben.
Später würd ich eventuell mal überlegen wie ich ein kleines Display
einbinden kann und den PC halt nur Optional zu machen. Aber ich muss
erstmal das hinbekommen was ich oben geschrieben habe, dann kann man ja
noch anderes zubauen wie Display, Eisspender oder Förderband.
Inwieweit bist du auf den LPC935 festgelegt? Ich würd mir am Anfang gut überlegen welche Peripherie (UART, SPI, I2C..etc) du brauchst bzw was du konkret auf dem uC implementieren möchtest. Am besten ist, wenn du dir auch gleich überlegst welche Dinge du eventuell später noch ergänzen möchtest (Display, Matrix-Keyboard,Temperatursensor...etc) und wie du das mit den zur Verfügung stehenden IO-Ports lösen könntest. Es gibt nichts blöderes, als wenn du im Laufe der Realisierung draufkommst, dass die Wahl des uC vielleicht doch nicht ideal war. Da handelst dir dann mehr Probleme ein, als nötig wären.
Wir habe den Klassenintern ausgewählt mit dem Lehrer damit wir bei problemen uns etwas selber helfen können und nicht jeder eine andere grundlage hat. Der Lehrer hat gesagt das der Controller schon viel zu gut ist und genug möglichkeiten nach oben frei hat. Es ist wichtiger das dass Projekt nachher läuft als das es riesen groß ist. XXXXXXXXXXXXXXXXXXXXXXXXXDATENXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Die Firma NXP bietet eine Vielzahl von leistungstarken µControllern auf Basis eines verbesserten 8051-Cores. !!! Hinweis: Der Board wird über die USB-Schnittstelle mit 5V versorgt. !!! Technische Daten fuer das Entwicklungsmodul NLB LPC935 7.38 MHz SystemClock 256 IRAM + 512 Byte XRAM 4* 8bit ADC und DAC I2C-Controller, SPI-Controller PWM und CCU Reset über Taster möglich Alle Anschlüsse des LPC935 sind auf Steckverbinder herausgeführt. Spannungsversorgung: 5V. TMP 100 Temperatursensor (via I²C-Schnittstelle) Licht-Frequenz-Umsetzer TSL235R Poti für ADC-Beispiele Jumper zur Aktivierung des Bootstrap-Loaders LED-Anzeigen Auf Port2, RxD, TxD, SDA und SCL (I²C-Schnittstelle) 1 Taste mit Interrupt USB <-> RS232 Converter (FT232R) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Für mich sind ja normale Ein / Ausgänge wichtig und ein Analog eingang für den Poti. Wenn Display oder so nicht möglich ist kann ich mir später nen anderen Controller kaufen aber zu dem reinen Schulischen Projekt sollt er reichen. Hoff ich ;-1)
Also der LPC935 ist mehr als ausreichend für dein Vorhaben. Du solltest den PC und Controller in Master und Slave unterteilen, womit das parallel arbeiten dann recht einfach wird. Welcher der beiden der Master wird ist dabei dir überlassen. Du musst das dann natürlich nur in deiner Software berücksichtigen. Kommunikation zwischen den beiden am einfachsten per RS232 im klartext Protokoll (vereinfacht das spätere Debuggen). Der Controller könnte später auch z.B. per SPI ein eigenes Grafik Display ansteuern, womit der PC hinfällig werden würde. Aber das ist momentan ja nicht gefordert bei dir. Insgesamt sollte dein Vorhaben recht gut zu realisieren sein. Vorraussetzung ist natürlich, dass du dich in PC/8051er Programmierung und der Hardware des LPC935 auskennst. Ciao, Rainer
>Insgesamt sollte dein Vorhaben recht gut zu realisieren sein. >Vorraussetzung ist natürlich, dass du dich in PC/8051er Programmierung >und der Hardware des LPC935 auskennst. Das hört sich gut an, ich kenne mich noch nicht gut aus aber das ist ja der sinn der sache. Das Projekt ist sozusagen ein lernobjekt. In der schule haben wir kleine sachen wie Motor starten / regeln usw gemacht aber nächstes Jahr ist dies Projekt ein großer bereich dar mit 8 Stunden in der Woche. >Du solltest den PC und Controller in Master und Slave unterteilen, womit >das parallel arbeiten dann recht einfach wird. Danke für den Tip , ich werd mich mal informieren wie man das macht und was zu beachten ist.
Daniel Grzesik schrieb: > Das hört sich gut an, ich kenne mich noch nicht gut aus aber das ist ja > der sinn der sache. Dann fürchte ich, daß Du Dich um einiges übernimmst. Eine Mehr-Prozessor-Applikation ist definitiv nichts für Anfänger! Ein Großteil der Entwicklungsarbeit ist dann das Datenprotokoll mit Fehlererkennung und Resynchronisation bei Störungen. Und zu allem Überfluß hast Du immer 2 Programme, in denen der Fehler liegen kann. Mache alles nur auf dem MC, das ist für nen Anfänger überschaubar und trotzdem nicht leicht. Für die Anzeige nimm ein Standard-Text-Display, d.h. was HD4780 kompatibles: http://de.wikipedia.org/wiki/HD44780 Das braucht dann nochmal 6 Leitungen zu Deinem MC. Ein Text-LCD hat auch den großen Vorteil, Du kannst Dich voll auf das Programm konzentrieren und vergeudest nicht nutzlos Zeit mit irgendwelchem Grafik-Schnullifax. Es soll schon Leute gegeben haben, die hatten zum Projektende nur ne blöde Startanimation zu bieten und garnichts am Programm gemacht. Das ist dann natürlich ne glatte "6". Zu einem Projekt gehört nämlich auch, die Aufgaben nach Wichtigkeit zu priorisieren. Peter
Hallo Daniel, das Projekt ist eigentlich recht einfach zu realisieren. Die o.a. Bedienung und Hardware lassen einen einfachen Aufbau zu. Ihr sollt einen PC einsetzen und einen µC. Also ist die einfachste Aufteilung: der µC macht nur das, was der PC will und nicht selber kann. Also de µC als eine Steuereinheit mit Befehlsprotokoll. z.B. Befehle wie : Melde Potiwert LEDx ein Ventil1 120ms etc... Bei Ventil habe ich extra die Zeit reingesetzt, da genaues Timing mit den PC und serieller Übertragung (fast) nicht geht. Also einfach die Hardwarefunktionen nacheinander realisieren, die Befehle definieren und diese anschließend im PC-Programm sinnvoll nacheinander ausgeben. Evtl. sollte noch eine "Glas voll" Erkennung eingebaut werden. avr
>Bei Ventil habe ich extra die Zeit reingesetzt, da genaues >Timing mit den PC und serieller Übertragung (fast) nicht geht. Ich hatte mir auch sowas gedacht. Also Timer im Controller und dann diesen per PC starten und setzen. Die mischungsverhältnisse ändern dann nur die Zeiten der Timer 1 und 2 . Füllstandsanzeige währ klasse aber wie bewerkstelligen ? Waage ? Auch wollten wir bei den Kanistern sowas einbauen das die anlage nicht leer läuft. Aber wie kann man das machen KAnister werden 2L Wasserkanister http://cgi.ebay.de/Kanister-2-Liter-2-Stuck-1-60-Euro-/270590454609?cmd=ViewItem&pt=DE_Sport_Camping_Outdoor_Camping_Zubeh%C3%B6r&hash=item3f0072ab51 Keine ahnung wie man da den füllstand abfragen kann. Ich habe auch derzeit ein problem bei der auswahl der MAgnetventile, Vorgesteuert Direktgestuert zwangsgesteuert http://cgi.ebay.de/2-fach-Elektro-Magnetventil-3-4-AG-NC-10mm-12V-DC-/200482403740?cmd=ViewItem&pt=Waschmaschinen_Zubeh%C3%B6r&hash=item2eadaeb59c Sowas wollten wir nehmen , kleiner schlauch zu den kanistern -> wenieger durchfluss = besser regelbar mit Timer der große sollt nach außen geführt werden zum glas. Aber reicht ein Vorgesteuertes Ventil ? wenn der Kanister fast leer ist muss das ja trozdem noch sicher abschalten. ich wollte demnächst nach HH zu conrad fahren und Material kaufen. Wollte eine lochraster Platine nehmen und dann muss ich ja sicher Transistoren nehmen zum schützen der ausgänge des Controllers. Gibt es da eventuell einen Tip was man nehmen kann. ruhig besser da die eh nur nen par cent kosten. Oder gibt es fertige platienen mit 10 stück für solche anlässe ? Potenzimeter hab ich das CIP162/220KLIN ( 220k Linear ) gedacht, kostet 1,66€. Das muss ich doch dann ohne zusatzwiderstände anklemmen und nutzen können. Oder bedarf das einer besonderen schaltung ? Danke für die Tips und Hilfe
Hi, Display von einen µC anzusteuern ist ziemlich einfach, ich mach das grad mit dem STM32 und einem DOGXL on Electronic Assembly via SPI vom µC aus. Da gibts direkt noch einen Touchscreen-Aufsatz den man über die Analogports einlesen kann. Ich würde auch alles mit dem µC machen, da tatsächlich die Kommunikation mit dem PC nicht zu unterschätzen ist. Kauf bloß nicht bei Conrad, da wirst Du arm. bestell Deine Sachen bei Reichelt. Füllstandanzeige könnest Du durch einen kleinen Magnetschwimmer und einen Reedschalter realisieren. Gruß Tom
Also nun ist es soweit ich fange an zu Programmieren mit C. Ich habe schon 6 Taster mit Softwareentprellung, Potentiometer mit werteausgabe sowie alle LEDs des Boards in betrieb. Nun bin ich dabei ein paar kleine abläuft zu entwickeln. Leider haben wir in derschule sowas noch nie gemacht und werden ins kalte wasser geschmissen. meine Idee: Abfrage der eingänge Taster 1 Wenn Geschlossen weiter Sonst Meldung -> zb printf("T1 offen\n"); Taster 2 Wenn Geschlossen weiter Sonst Meldung Meldung-> Poti einstellen mit T3 bestätigen T3 Geschlossen -> AD Wandlung ausführen und Wert speichern Kann man so ein programm planen ? ich habe immer das die meldungen immer wieder kommen oder auch immer die AD wandlung abgefragt wird. Kann man eigentlich den Controller auf eine eingabe warten lassen ? Ist es möglich eine switch case funktion mit Tastern anzusteuern ? Hat jemand ein programm zur hand an dem ich sehen kann wie überhaupt ein ablauf geplant und vorallen umgesetzt werden soll ? Hoffe jemand kann mir helfen ein bischen licht ins dunkel zu bringen Vielen Dank im vorraus Daniel
Ach wenn ich keine antworten hier bekomme frage ich einfach mal weiter, die alten probleme sind nun beseitigt. Wie kann ich sekundengenau das schalten eines ausganges ? Ich habe derzeit static void delay (long x) // Zeitverzögerung Einbauen { unsigned long i,j; for (j=0;j<x;j++) for (i=0;i<50000;i++); } aufruf dann mit delay(zeit); Aber zum schalten der ausgänge muss ich das genauer haben und auch länger. denk mal zwischen 3 und 30 sekunden. Wird ja das magnetvential angesteuert und bis ein glas befüllt ist dauert das nunmal etwas. würde mich über eine hilfe sehr freuen
Der LPC935 hat einen eingebauten RTC Timer, welcher gerade für längere Zeiten brauchbar ist. Mit diesem kannst du eine sehr genaue 1s Zeitbasis realisieren. Um dann auf deine 3-30s zu kommen brauchst du diesen dann nur die nötige Anzahl durchlaufen zu lassen. Hier etwas Code wie der RTC anzusteuern ist: Einmal beim Start initialisieren
1 | // RTC konfigurieren bei internem RC Oszillator mit 7,3728 MHz
|
2 | RTCCON = 0x60; |
Dann in einer Funktion z.B.:
1 | // Anzahl "sekunden" warten
|
2 | void sleep(unsigned char sekunden) { |
3 | unsigned char zaehler; |
4 | |
5 | for (zaehler = 0; zaehler < sekunden; zaehler++ { |
6 | // Reloadwert für 1s
|
7 | RTCL = 0x00; |
8 | RTCH = 0xE1; |
9 | |
10 | // RTC starten
|
11 | RTCCON = RTCCON | 1; |
12 | |
13 | // Unterlauf Flag abfragen
|
14 | while (!(RTCCON & 0x80)); |
15 | |
16 | // Timeout Zähler stoppen und Unterlauf Flag löschen
|
17 | RTCCON = RTCCON & 0x7E; |
18 | }
|
19 | }
|
Falls du die Zeit nicht in der Funktion warten willst/kannst, dann musst du das Ganze natürlich per Interrupt und nicht Polling machen. ;) Ciao, Rainer
Danke ich habe aber noch nen fehler mit der funktion, 2 hab ich weg bekommen aber nun bleibt noch was. //********************************************************************** ********** void zapfen (void) { B1=0; sleep(zeit1); // int Wert B1=1; R1=0; sleep(zeit2); // int Wert R1=1; } //********************************************************************** ************ // Anzahl "sekunden" warten void sleep (unsigned char sekunden) { unsigned char zaehler; for (zaehler = 0; zaehler < sekunden; zaehler++) { // Reloadwert für 1s RTCL = 0x00; RTCH = 0xE1; // RTC starten RTCCON = RTCCON | 1; // Unterlauf Flag abfragen while (!(RTCCON & 0x80)); // Timeout Zähler stoppen und Unterlauf Flag löschen RTCCON = RTCCON & 0x7E; } } //********************************************************************** ***************** *** WARNING C090 IN LINE 156 OF C:\Basteln unsortiert\Ride\C File1.c : Call to function 'sleep' without prototype *** WARNING C183 IN LINE 156 OF C:\Basteln unsortiert\Ride\C File1.c : 'sleep': function definition requires ANSI style parameter list *** ERROR C007 IN LINE 166 OF C:\Basteln unsortiert\Ride\C File1.c : Invalid type in 'sleep' definition *** WARNING C096 IN LINE 185 OF C:\Basteln unsortiert\Ride\C File1.c : Function 'sleep' should return a value RC51 COMPILATION COMPLETE. 3 WARNINGS, 1 ERROR Habe Zahlen bei Sleep() eingegeben aber endert sich nix. Einmal beim Start initialisieren habe ich gemacht.
Daniel Grzesik schrieb: > *** WARNING C090 IN LINE 156 OF C:\Basteln unsortiert\Ride\C File1.c : > Call to function 'sleep' without prototype > *** WARNING C183 IN LINE 156 OF C:\Basteln unsortiert\Ride\C File1.c : > 'sleep': function definition requires ANSI style parameter list Du hast die Funktion "sleep" erst nach der Methode "zapfen" definiert, weshalb der Compiler diese nicht findet. Also entweder verschiebst du die Funktion "sleep" vor deine Funktion "zapfen" oder du musst sie vorher explizit bekanntgeben. Daniel Grzesik schrieb: > *** ERROR C007 IN LINE 166 OF C:\Basteln unsortiert\Ride\C File1.c : > Invalid type in 'sleep' definition > *** WARNING C096 IN LINE 185 OF C:\Basteln unsortiert\Ride\C File1.c : > Function 'sleep' should return a value > RC51 COMPILATION COMPLETE. 3 WARNINGS, 1 ERROR Dies bezieht sich vermutlich auf eine etwas andere Syntax für deinen Compiler. Du musst mal schauen, ob deine Definition von Variablen evtl anderst aussieht. Ich benutze nämlich einen anderen Compiler als du. Ciao, Rainer
Daniel Grzesik schrieb: > *** ERROR C007 IN LINE 166 OF C:\Basteln unsortiert\Ride\C File1.c : > Invalid type in 'sleep' definition Die Meldung kommt bei RIDE, wenn der Funktionsprototyp fehlt. Dann geht der Compiler ziemlich Stur vom Übergabetyp void aus und meckert, wenn die Funktion doch was anderes will. Einfach ganz oben im Programm die Zeilen void zapfen (void); und void sleep (unsigned char sekunden); (mit Semikolon am Ende!) einfügen. Für alle weiteren Funktionen sollte man das ebenfalls machen. tschuessle Bernhard
Hallo zusammen, ich habe eine Frage zu dem eingestellten Wert: Wie kommt es dass die Zahl 0xE100 eine Zeit von 1sek gibt. // Reloadwert für 1s RTCL = 0x00; RTCH = 0xE1; Ich verstehe wie du auf den Wert 60 kommst. Aber sind dies nicht noch Millisekunden und dann wäre doch 100 der richtige Wert um auf 1 Sekunde zu kommen? lg oliver
Mit RTCCON = 0x60 werden RTCS1=RTCS2=1 gesetzt. Diese beiden Bits bestimmen die Geschwindigkeit und Quelle, mit welcher der RTC getaktet wird. In Verbindung mit RCCLK=1 und FOSC[2:0]=011 (interner RC Oszillator) ergibt sich, dass der RTC vom RC Oszillator den Takt bekommt (7,3728 MHz). Dieser wird nun durch den 7Bit Vorteiler des RTC geschickt, wodurch der neue Takt 57600 Hz beträgt. Bei einem Reloadwert von 0xE100=57600 zählt der RTC genau 1s bis zum Überlauf. Ich hoffe, das war verständlich. :) Ciao, Rainer
Ja das macht jetzt sinn. :-) Ich habe fälschlicher weise immer die Frequenz durch eins geteilt. Aber frequenz sind ja Perioden pro Sekunde... Manchmal steht man etwas auf dem Schlauch. Danke schön.(auch für die schnelle Antwort) Gruß Oliver
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.