Serial Signal analyse

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche


Hier mal ein kleines programm,
für Analyse von Diversen Seriellen Daten....
bisher nicht Implementierte Infrarot Signale,
Alarmanlagen Protokolle,
Heizungs Kommunikation,
Funk Wetter Stations Übertragungen....
ich denke hier sind die möglichkeiten relativ offen.




dnl ################################################################################
dnl #                                                                              #
dnl #   Copyright (c) 08/2009 - Michael Schultz <ethersex@keyb.de>                 #
dnl #                                                                              #
dnl # This program is free software; you can redistribute it and/or modify it      #
dnl # under the terms of the GNU General Public License (either version 2 or       #
dnl # version 3) as published by the Free Software Foundation.                     #
dnl #                                                                              #
dnl # This program is distributed in the hope that it will be useful,              #
dnl # but WITHOUT ANY WARRANTY; without even the implied warranty of               #
dnl # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
dnl # GNU General Public License for more details.                                 #
dnl #                                                                              #
dnl # You should have received a copy of the GNU General Public License            #
dnl # along with this program; if not, write to the Free Software                  #
dnl # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                    #
dnl #                                                                              #
dnl # For more information on the GPL, please go to:                               #
dnl # http://www.gnu.org/copyleft/gpl.html                                         #
dnl #                                                                              #
dnl #                                                                              #
dnl # Signal Eingang PD2 / INT0 / Pin16(40Pinner)                                  #
dnl #                                                                              #
dnl # Ausgabe Format:                                                              #
dnl # Hexadezimale angabe von timer counts zwichen 2 ausgelösten interrupts        #
dnl # Ein Timer Count endspricht bei 16 MHz eine zeit von 64µs,                    #
dnl # Jeder Wechsel von H nach L und L nach H löst einen Interrupt aus.            #
dnl # bei jeder übermittlung wird mit mit dem 1. counter wert angezeigt,           #
dnl # ob es eine aktiv low oder aktiv high leitung ist, 01 = high, 00 = low        #
dnl #                                                                              #
dnl # Timings=                                                                     #
dnl #     Angabe der ausgelösten Interrupts                                        #
dnl # TimerOverflow=                                                               #
dnl #     Zeit Zwichen 2 Datenübertragungen, Paus und Daten Zeit,                  #
dnl #     1 Timer Überlauf endspricht 256 x Timer Counter                          #
dnl #     also @16 MHz --> 16,384 mS                                               #
dnl #                                                                              #
dnl # Daten auf dem PC emfangen:                                                   #
dnl # :~# while true ; do socat stdio tcp4-listen:4444 ; sleep 1 ; done            #
dnl #                                                                              #
dnl # Bedingt durch den geringen speicher, Nur für ATMega644 geeignet,             #
dnl # Sowie nur maximal 1024 Interrupt Timings alle ca. 20 mS                      #
dnl #                                                                              #
dnl # Maximale Daten übertragungs Pausen Länge = 1073 Sekunden = <18 Min           #
dnl ################################################################################

uint16_t counter1 = 1;  dnl     Zähler, Anzahl INT0 Interupts
uint16_t counter2 = 0;  dnl     Positions Zähler, TCP Ausgabe Byte
uint16_t counter3 = 0;  dnl     Ausgabe verzögerung für Timer0_OFV
uint16_t counter4 = 0;  dnl     Zähler, Anzahl TIMER0_OVF Interupts

uint8_t  data[1024];

CONTROL_START
        ON STARTUP DO
                _TCCR0_PRESCALE |=  _BV(CS02);  dnl     TCCR0B(CS02)=1          Prescaler to 1024
                _TCCR0_PRESCALE &= ~_BV(CS01);  dnl     TCCR0B(CS01)=0          Prescaler to 1024
                _TCCR0_PRESCALE |=  _BV(CS00);  dnl     TCCR0B(CS00)=1          Prescaler to 1024
                _EIMSK          |=  _BV(INT0);  dnl     EIMSK(INT0) = 1         Interrupt on INT0 Pin
                _EICRA          &= ~_BV(ISC01); dnl     EICRA(ISC01) = 0        Interrupt on all INT0 Pin changes
                _EICRA          |=  _BV(ISC00); dnl     EICRA(ISC00) = 1        Interrupt on all INT0 Pin changes
                 TIMSK0         |=  _BV(TOIE0); dnl     TIMSK0(TOIE0) = 1       Interrupt on Timer Overflow aktiviere
                TCP_CONNECT(10.0.0.35, 4444, message_handler);
        END
        TCP_HANDLER_PERSIST(message_handler)
                for (;;) {
                        if ( counter1 >= 2 && counter4 >= counter3 + 2 ) {
                                if ( PORTD & ( 1 << 2 ) ) {
                                        data[0] = 1 ;
                                } else {
                                        data[0] = 0 ;
                                }
                                TCP_SEND("%04d-%02d-%02d %02d:%02d:%02d %s Timings=%d TimerOverflow=%d\n", CLOCK_YEAR(), CLOCK_MONTH(), CLOCK_DAY(), CLOCK_HOUR(), CLOCK_MIN(), CLOCK_SEC(), CONF_HOSTNAME, counter1, counter4);
                                for ( counter2 = 0 ; counter2 < counter1 ; counter2 ++ ) {
                                        TCP_SEND("%02x ",data[counter2]);
                                }
                                TCP_SEND("\n");
                                TCP_SEND("\n");
                                counter1 = 1 ;
                                counter3 = 0 ;
                                counter4 = 0 ;
                        }
                        PT_YIELD(pt);
                }
        TCP_HANDLER_END();
CONTROL_END

ISR(INT0_vect)
{
        data[counter1] = TCNT0;
        counter1 ++;
        if ( counter1 >= 1025 ) { counter1 = 0; }
        counter3 = counter4 ;
        TCNT0 = 0;
}

ISR(TIMER0_OVF_vect)
{
        counter4 ++;
}




Beispiel ausgabe mittels:

~# while true ; do socat stdio tcp4-listen:4444 ; sleep 1 ; done


2009-08-05 10:16:23 wichtel Timings=557 TimerOverflow=9109
00 13 07 8c 07 1f 07 1f 08 3f 07 1f 07 3f 08 1e 08 3f 08 3f 07 1f 07 1f 07 1f 08 1e 08 1e 08 3f 07 3f 08 3f 08 3f 07
3f 08 3f 07 3f 08 1e 08 1f 07 1f 07 1f 07 3f 08 3f 08 3f 07 1f 07 1f 07 3e 08 1f 07 1f 07 1f 07 1e 08 1e 08 41 07 8b
07 1f 07 1f 07 3f 08 1f 07 3f 08 1e 08 3f 07 3f 08 1f 07 1f 07 1f 07 1f 08 1e 08 3f 07 3f 08 3f 07 3f 08 3f 08 3f 07
3f 08 1e 08 1e 08 1f 07 1f 07 3f 08 3f 07 3f 08 1f 07 1f 07 3f 08 1e 08 1f 07 1f 07 1f 07 1e 08 40 07 8b 08 1e 07 1f
07 3f 08 1e 08 3f 08 1e 08 3f 07 3f 08 1e 08 1f 07 1f 07 1f 07 1f 08 3f 07 3f 08 3f 07 3f 08 3f 07 3f 08 3f 08 1e 08
1e 08 1e 08 1f 07 3f 08 3f 07 3f 08 1e 08 1f 07 3f 08 1e 08 1e 08 1f 07 1f 07 1f 07 40 08 8b 08 1e 08 1e 07 3f 08 1e
08 3f 07 1f 08 3e 07 3f 08 1e 08 1e 08 1f 07 1f 07 1f 07 3f 08 3f 08 3f 07 3f 08 3f 07 3f 08 3f 07 1f 08 1e 08 1e 08
1e 08 3f 08 3f 07 3f 08 1e 08 1e 08 3f 08 1e 08 1e 08 1e 08 1f 07 1f 07 41 08 8b 08 1e 08 1e 08 3f 08 1e 08 3f 07 1f
07 3f 08 3f 08 1e 08 1e 08 1e 08 1e 07 1f 07 3f 08 3f 07 3f 08 3f 08 3f 07 3f 08 3f 07 1f 07 1f 08 1e 08 1e 08 3f 07
3f 08 3f 08 1e 08 1e 08 3f 07 1f 08 1e 08 1e 08 1e 08 1f 07 41 08 8b 08 1e 08 1e 08 3f 07 1f 08 3e 08 1f 07 3f 08 3f
07 1f 08 1e 08 1e 08 1e 08 1e 07 3f 08 3f 07 3f 08 3f 07 3f 08 3f 08 3e 07 1f 07 1f 07 1f 08 1e 08 3f 07 3f 08 3f 07
1f 08 1e 08 3f 07 1f 07 1f 08 1e 08 1e 08 1e 08 41 07 8b 07 1f 08 1e 08 3f 07 1f 07 3f 08 1e 08 3f 08 3f 07 1f 07 1f
08 1e 08 1e 08 1e 08 3f 08 3e 07 3f 08 3f 07 3f 08 3f 07 3f 08 1e 07 1f 07 1f 07 1f 08 3f 07 3f 08 3f 07 1f 07 1f 08
3f 07 1f 07 1f 07 1f 08 1e 08 1e 08 41 07 8c 07 1f 07 1f 08 3e 08 1f 07 3f 08 1e 08 3f 08 3e 08 1f 07 1f 07 1f 08 1e
08 1e 08 3f 07 3f 08 3f 08 3e 07 3f 06

2009-08-05 10:18:51 wichtel Timings=557 TimerOverflow=9109
00 13 08 8b 07 1f 08 1e 08 3f 07 1f 07 3f 08 1f 07 3f 08 3f 07 1f 07 1f 08 1e 08 1e 08 1e 08 3f 08 3f 07 3f 08 3f 07
3f 08 3f 07 3f 08 1f 07 1f 07 1f 07 1f 08 3f 07 3f 08 3f 07 1f 07 1f 08 3f 07 1f 07 1f 07 1e 08 1e 08 1e 08 41 07 8c
07 1f 07 1f 08 3e 07 1f 07 3f 08 1e 08 3f 08 3f 07 1f 07 1f 07 1f 08 1e 08 1e 08 3f 07 3f 08 3f 08 3f 07 3f 08 3f 07
3f 08 1e 08 1f 07 1f 07 1f 07 3f 08 3f 08 3f 07 1f 07 1f 07 3f 08 1f 07 1f 07 1f 07 1f 08 1e 08 41 07 8b 07 1f 07 1f
07 3f 08 1e 07 3f 08 1e 08 3f 07 3f 08 1e 07 1f 07 1f 07 1f 08 1e 08 3f 07 3f 08 3f 07 3f 08 3f 08 3f 07 3f 08 1e 08
1e 08 1f 07 1f 07 3f 08 3f 07 3f 08 1f 07 1f 07 3f 08 1e 08 1f 07 1f 07 1f 07 1f 08 40 08 8b 08 1e 08 1f 07 3f 08 1e
08 3f 08 1e 08 3f 07 3f 08 1e 08 1e 07 1f 07 1f 07 1f 08 3f 07 3f 08 3f 07 3f 08 3f 07 3f 08 3f 08 1e 08 1e 08 1e 08
1f 07 3f 08 3f 07 3f 08 1e 08 1f 07 3f 08 1e 08 1e 08 1f 07 1f 07 1f 07 41 08 8b 08 1e 08 1e 08 3f 08 1e 08 3f 07 1f
08 3e 08 3f 08 1e 08 1e 08 1e 07 1f 07 1f 07 3f 08 3f 08 3e 07 3f 08 3f 07 3f 08 3f 07 1f 08 1e 08 1e 08 1e 08 3f 08
3f 07 3f 08 1e 08 1e 08 3f 08 1e 08 1e 08 1e 08 1f 07 1f 07 41 08 8b 08 1e 08 1e 08 3f 08 1e 08 3f 07 1f 07 3f 08 3f
08 1e 08 1e 08 1e 08 1e 07 1f 07 3f 08 3f 07 3f 08 3f 08 3e 07 3f 08 3f 07 1f 07 1f 08 1e 08 1e 08 3f 07 3f 08 3f 08
1e 08 1e 08 3f 07 1f 08 1e 08 1e 08 1e 08 1f 07 41 08 8b 07 1e 08 1e 08 3f 07 1f 08 3e 08 1f 07 3f 08 3f 07 1f 08 1e
08 1e 08 1e 08 1e 08 3f 08 3f 07 3f 08 3f 07 3f 08 3f 08 3e 08 1f 07 1f 07 1f 08 1e 08 3f 07 3f 08 3f 07 1f 08 1e 08
3f 07 1f 07 1f 08 1e 08 1e 08 1e 08 41 07 8b 07 1f 07 1e 08 3f 07 1f 07 3f 08 1e 08 3f 08 3f 07 1f 07 1f 08 1e 08 1e
08 1e 08 3f 08 3e 08 3f 08 3f 07 3f 06

bei den hier übertragenen daten handelt es sich um die Temp/Luftfeuchte übertragungen von meinen außen sensoren, siehe beschreibung zu dem Funk Wetter Stations Protokol, und dem Passendem Analyse Programm dafür.