Serial Signal analyse
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.