'------------------------------------------------------------------------------ ' (c) 2008 Gerhard Günzel - www.emagu.de '------------------------------------------------------------------------------ ' Datei : ventilsteuerung.BAS ' Datum : 04.08.09 ' Letzte Aenderung '------------------------------------------------------------------------------ ' Beschreibung: '------------------------------------------------------------------------------ ' Die Wasseranlage steuert bis zu fünf elektrische Wasserventile. ' ' Generelles: ' ' * Die Steuerung erfolgt mit einem Atmel-ATMega32-Board mit 16 Mhz Taktsignal. ' * Gießdaten sind im nichtflüchtenden EEprom Speicher hinterlegt. Die Vars ' * sind doppelt vorhanden. EEPROM-Variabe haben zusätzlich _e als Endung. ' * Beim Programmstart werden die Daten vom EEprom in das Sram kopiert- ' * Die Programmauswahl erfolgt aus Monatsprogrammen oder Sonderprogrammen, die ' * im EEprom abgelegt sind. 12 Monatsprogramme und 5 Sonderprogramme. Ist kein ' * Sonderprogramm aktiv, so wird das dem Monat entsprechende Programm gesucht. ' * Wenn Sonderprogramm größer 5 gewählt ist, wird Monatsprogramm gewählt. ' * Im EEprom sind sind auch Pointer oder Zeiten abgelegt. ' * Giessen kann generell über eine EEprom-Var ein- oder ausgeschaltet werden. ' * Ein Feuchtesensor wird zusätzlich zum Giessen einbezogen. (0=stop) ' * Dateneingabe über Menue: Rotary Switch und LCD Display oder USART. ' * Die Steuerung läuft vollautomatisch nach vorher definierten Daten. ' * Anzeige gerade aktueller Daten über LCD Display. Zeit, Datum, usw. ' * Ausgang für Wasserventile über potentialfreie Relais-Kontakte. ' * ULN2003AN als Treiber für Relais. ' * Zeiterfassung über Satellit mit einer GPS Maus (MobilCom Sirf Maus JP7). ' - GPS Empfänger im NMEA Modus mit Filterung des RMC Strings ' nach Zeit und Datum. Zeit in UTC Format(Coordinated Universal Time). ' - Sommerzeit beginnt am letzten Sonntag im Maerz ' - und endet am letzten Sonntag im Oktober. ' - Umrechnung von UTC in Lokal Time (UTC + 1 für Deutschland). ' * Zugriffsmöglichkeit über GSM Modem Siemens M20. ' - Steuersignale über Zifferntastatur eines Telefons mit Wählton Verfahren ' und Auswertung über DTMF (Dual Tone Multi Frequenz) MT8870DE Chip. ' - Information über SMS vom Siemens M20. ' * Eingabe vor Ort über Serielle Schnittstelle und Terminalemulator. ' - Siemens Pocket-PC mit Terminalemulator. ' - PC mit Hyperterminal etc. ' * Eingabe vor Ort über Rotary Switch und LC-Display 24x2. '------------------------------------------------------------------------------ ' Aufbau der Hardware '------------------------------------------------------------------------------ ' Ein dafür entwickeltes Prozessorboard mit 16 Mhz getaktet bildet die Grund- ' einheit. Die GPS-Maus und das Siemens GSM-Modem werden über UART angebunden. ' Das M20 hat eine RS232 Schnittstelle und die GPS-Maus TTL. Beide Geräte sind ' über Analogswitches an die UART des Mega32 geschaltet. Das M20 wird über ' einen Max232-Pegelwandler an die Analogswitches geführt, die GPS-Maus direkt. ' Ankommende Rufe über das M20 werden über den RING-Pin der RS232 ausgewertet. ' Nach softwaregesteuertem Abheben (Rufnummer Überprüfung) können Tonsignale ' über einen MT8870 (DTMF Chip) gefiltert und funktionell ausgewertet werden. ' Dateneingabe erfolgt über einen Rotary Switch und LCD-Display (24x2) oder ' über die Serielle Schnittstelle mittels Terminalemulator. (Pocket-PC). Dazu ' muss die Modemleitung abgezogen und der Pocket-PC angeschlossen werden. ' Die Steuerausgänge für die Ventile werden als potentialfreie Ausgänge ge- ' schaltet. Als Treiber für die Relais dient ein Darlington-Array ULN2003AN. ' '------------------------------------------------------------------------------ ' GPS-Maus '------------------------------------------------------------------------------ ' Auslesen einer GPS-Maus von MOBILECOM mit TTL Schnittstelle. ' Baudrate der Maus 38400. Default Baudrate - geht auch bei leerer Batterie. ' String synchronisieren ' String komplett einlesen und anzeigen - für debug, wird dann auskommentiert. ' Suchen nach "$GPRMC". ' Suchen nach erstem Komma - dahinter 6 bytes mit Zeit in Str1 ablegen ' Suchen nach neuntem Komma(weitere 8) - dahinter 6 Bytes Datum in Str2 ablegen ' Formatieren von Zeit und Datum und am LCD anzeigen: ' '------------------------------------------------------------------------------ ' Siemens S20 GSM-Modem (Terminal Version) '------------------------------------------------------------------------------ ' Das S20 kann im Textmodus für SMS genutzt werden. Zuerst wird das S20, nach ' einer kleinen Wartezeit (10 sec) initialisiert. Es wird der Pin, sowie Text- ' modus und CLIP eingegeben. Dies erfolgt mit AT-Befehlen über die USART, an ' der auch die GPS-Maus hängt. Maus und S20 werden über Analogschalter TC4016 ' je nach Funktion umgeschaltet. Das S20 hat einen Ring Indikator an der USART. ' Das Signal löst einen Interrupt aus, der dann auf Modem umschaltet.Clip zeigt ' die Telefonnummer des Anrufers als String an der USART im Klartext an. ' Wird die richtige Nummer erkannt, so hebt das S20 ab und stellt eine analoge ' Leitung her. Bei Störung (z.B. Auflegen) würde das M20 in der Input-Schleife ' hängen. Dazu wird parallel zum Anruf ein Timer gestartet, der nach Ablauf ' eine "+CLIP" Sequenz an das M20 sendet. Die Funktion Hole_datensatz wird nun ' durchlaufen, und somit die Input-Schleife verlassen ' Am Handapparat Ausgang wird das Analog Signal abgenommen und ' dem MT8870 zugeführt.Der Chip wertet die DTMF (Dual Tone Multi Frequenz) aus, ' und liefert dem Mega32 auf 4 Leitungen den Binärcode entsprechend der Ziffer, ' die der Anrufer drückt. Diese Information wird nun für entsprechende Steuer ' Funktionen genutzt. Generell werden fünf Tasten erwartet und in einem Byte- ' Array abgelegt. Das erste Byte ist Bezeichner für die Befehlsgruppe, die ' restlichen vier Bytes beinhalten den Wert. Die Befehlsgruppen sind: ' 1 = Kurze Giessdauer, 2 = lange Giessdauer, 3 = Sonderprogramm 0 bis 5 ' 4 = Giessen generell an oder aus, 5 = Giess_Startzeit eins, ' 6 = Giess_Startzeit zwei, 0 = Statusabfrage (SMS mit den Werten 1 bis 6 und ' Aktuelles Programm. ' '------------------------------------------------------------------------------ ' Giessdaten in einer Long Variablen '------------------------------------------------------------------------------ ' In der Variablen sind die reinen Hardware-Daten hinterlegt. Wie Ventile Ein ' oder Aus oder Giesszyklen ein/aus oder Giesszeit ist lang oder kurz. ' Daten wie reale Giesszeit oder Länge der Giesszeit sind in anderen Variablen ' und können über Rotary-Switch oder RS232 Schnittstelle eingegeben werden. ' Die Daten werden im EEprom abgelegt und beim Programmstart ins Sram kopiert. ' ' Bedeutung der Long Variablen, die Kürzel für das Programm enthalten. ' ' &B0000000_0000_0000_0000_0000_0000_00000 ' 7 Gruppen von links nach rechts: ' 0000000_ Sonder Programm ' 0000_ Fünf gleiche Gruppen - Jede Gruppe für ein Ventil ' erste und zweite ' 0000 ' ||||_ erster Giesszyklus - an/aus 0=aus 1=an ' |||__ erste kurze oder lange Giesszeit 0=kurz 1=lang ' ||___ zweiter Giesszyklus - an/aus 0=aus 1=an ' |____ zweite kurze oder lange Giesszeit 0=kurz 1=lang ' 00000_ Ventile 5 Stück 0=aus 1=an ' ----------------- ' Bit 0 - 4 Ventile 0 bis 4 - an aus ' Bit 5 - 8 Ventil 0 Daten ' BIT 8765 ' ||||_ erster Giesszyklus - an/aus 0=aus 1=an ' |||__ erste kurze oder lange Giesszeit 0=kurz 1=lang ' ||___ zweiter Giesszyklus - an/aus 0=aus 1=an ' |____ zweite kurze oder lange Giesszeit 0=kurz 1=lang ' Bit 9 - 12 Ventil 1 Daten Daten wie oben ' Bit 13 - 16 Ventil 2 Daten Daten wie oben ' Bit 17 - 20 Ventil 3 Daten Daten wie oben ' Bit 21 - 24 Ventil 4 Daten Daten wie oben ' Bit 25 - 31 Noch frei ' ----------------- ' Beispiel ' &B0000000_0000_0000_0011_0000_0000_00100 ' Zweites Ventil, erste Giesszeit an und lang, zweite Giesszeit aus. ' ' ---------------------------------------------------------------------------- ' Per Menue veränderbare Variablen - im EEprom hinterlegt ' ---------------------------------------------------------------------------- ' Mould_duration_short_e = 1 'Kurze Giessdauer in Minuten ' Mould_duration_long_e = 3 'Lange Giessdauer in Minuten ' Prog_sonder_aktiv_e 'Sonderprogramm aktiv = 1-5, 0=aus ' Giessen_ein_aus_e 'Giessen generell an oder aus ' Mould_start_time1_e = 0625 'Giess_Startzeit eins als Zahl (6Uhr25) ' Mould_start_time2_e = 1914 'Giess_Startzeit zwei als Zahl (19Uhr14) ' Monatsprogramme und Sonderprogramme '------------------------------------------------------------------------------ ' Beschaltung des Mega32 '------------------------------------------------------------------------------ ' ' Belegt Belegt ' mit mit '------------------------------------------------------------------------------ ' | ------------ | ' 8870 Q1 | (XCK/T0) PB0 |-|1 40|-| PA0 (ADC0) | LCD DB4 ' 8870 Q2 | (T1) PB1 |-|2 39|-| PA1 (ADC1) | LCD DB5 ' 8870 Q3 | (INT2/AIN0) PB2 |-|3 38|-| PA2 (ADC2) | LCD DB6 ' 8870 Q4 | (OC0/AIN1) PB3 |-|4 M 37|-| PA3 (ADC3) | LCD DB7 ' | (SS) PB4 |-|5 E 36|-| PA4 (ADC4) | LCD RS ' ISP | (MOSI) PB5 |-|6 G 35|-| PA5 (ADC5) | LCD E ' ISP | (MISO) PB6 |-|7 A 34|-| PA6 (ADC6) | MAX232_onoff ' ISP | (SCK) PB7 |-|8 33|-| PA7 (ADC7) | Gpsmaus_onoff ' | RESET |-|9 3 32|-| AREF | ' | VCC |-|10 2 31|X| GND | ' | GND |-|11 30|X| AVCC | ' | XTAL2 |-|12 29|-| PC7 (TOSC1 | ' | XTAL1 |-|13 28|-| PC6 (TOSC2)| ' 4016 10+2| (RXD) PD0 |-|14 27|-| PC5 (TDI) | Rel 6 ULN2003AN 220V ' 4016 9+3 | (TXD) PD1 |-|15 26|-| PC4 (TDO) | Rel 5 ULN2003AN ' Switch | (INT0) PD2 |-|16 25|-| PC3 (TMS) | Rel 4 ULN2003AN ' MAX Ring | (INT1) PD3 |-|17 24|-| PC2 (TCK) | Rel 3 ULN2003AN ' Kanal B | (OC1B) PD4 |-|18 23|-| PC1 (SDA) | Rel 2 ULN2003AN ' Sensor | (OC1A) PD5 |-|19 22|-| PC0 (SCL) | Rel 1 ULN2003AN ' Kanal A | (ICP1) PD6 |-|20 21|-| PD7 (OC2) | ' | ------------ | '------------------------------------------------------------------------------