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 # Programm Erstellung: # dnl # Copyright (c) 08/2009 - Michael Schultz # dnl # # dnl ################################################################################ dnl uint8_t delay = 0; #include CONTROL_START ECMD_GLOBAL(pos, 0, uint16_t); ECMD_GLOBAL(dir, 0, uint8_t); dnl Drehrichtung ECMD_GLOBAL(move, 0, uint8_t); ECMD_GLOBAL(speed, 0, uint8_t); ECMD_GLOBAL(coun, 0, uint16_t); dnl Counter fr timer0 interrupt berlauf durchgnge THREAD(update_temp) HR20_SHOW_TEMP(hr20_temp_get()); WAIT(2) HR20_SHOW_VOLTAGE(HR20_GET_BATT()); WAIT(1) THREAD_END(update_clock) THREAD(motor) WAIT(60); DEBUG(`"ich lebe noch... :-)"'); THREAD_END(motor) ON STARTUP DO dnl TCCR0A CS02 CS01 CS00 Datenblatt Seite 44 dnl 0 0 0 No clock source (Timer/Counter stopped) dnl 0 0 1 clkI/O/(No prescaling) dnl 0 1 0 clkI/O/8 (From prescaler) dnl 0 1 1 clkI/O/64 (From prescaler) dnl 1 0 0 clkI/O/256 (From prescaler) dnl 1 0 1 clkI/O/1024 (From prescaler) dnl 1 1 0 External clock source on T0 pin. Clock on falling edge. dnl 1 1 1 External clock source on T0 pin. Clock on rising edge. TCCR0A &= ~_BV(CS02); dnl TCCR0A(CS02) = 0 counter0 prescaler = 0 TCCR0A &= ~_BV(CS01); dnl TCCR0A(CS01) = 0 counter0 prescaler = 0 TCCR0A |= _BV(CS00); dnl TCCR0A(CS00) = 1 counter0 prescaler = 0 TIMSK0 |= _BV(TOIE0); dnl TIMSK0(TOIE0) = 1 Timer0 Interrupt Aktivieren PCMSK0 |= _BV(PCINT4); dnl Interrupt aktivierung fr Lichtschranke dnl Gendertes Layout !!!!! DDRB &= ~_BV(PB0); dnl switch pin for Input DDRB(PB0) = 0 DDRB &= ~_BV(PB1); dnl switch pin for Input DDRB(PB1) = 0 DDRB &= ~_BV(PB2); dnl switch pin for Input DDRB(PB2) = 0 DDRB &= ~_BV(PB4); dnl switch pin for Input DDRB(PB4) = 0 DDRB &= ~_BV(PB5); dnl switch pin for Input DDRB(PB5) = 0 PORTB |= _BV(PB0); dnl PORTB(PB0) = 1 seite 56 und 57 PORTB |= _BV(PB1); dnl PORTB(PB1) = 1 seite 56 und 57 PORTB |= _BV(PB2); dnl PORTB(PB2) = 1 seite 56 und 57 PORTB &= ~_BV(PB4); dnl PORTB(PB4) = 0 seite 56 und 57 PORTB &= ~_BV(PB5); dnl PORTB(PB5) = 0 seite 56 und 57 PCMSK1 |= _BV(PCINT8); dnl Interrupt aktivierung fr Taste1 PCMSK1 |= _BV(PCINT9); dnl Interrupt aktivierung fr Taste2 PCMSK1 |= _BV(PCINT10); dnl Interrupt aktivierung fr Taste3 PCMSK1 |= _BV(PCINT12); dnl Interrupt aktivierung fr wahlrad PCMSK1 |= _BV(PCINT13); dnl Interrupt aktivierung fr wahlrad EIMSK |= _BV(PCIE1); DDRE &= ~_BV(PE4); dnl Eingang Schalten PORTE &= ~_BV(PE4); dnl Pullup deaktivieren PCMSK1 |= _BV(PCINT4); dnl interrupt fr den pin aktivieren EIMSK |= _BV(PCIE0); dnl interrupt generell fr pereferie 0 aktivieren DDRE |= _BV(PE2); dnl Lichtschranken pinne, vorbereiten, aber aus DDRE |= _BV(PE3); dnl Lichtschranken pinne, vorbereiten, aber aus dnl PORTE &= ~_BV(PE2); dnl Lichtschranken pinne, vorbereiten, aber aus dnl PORTE &= ~_BV(PE3); dnl Lichtschranken pinne, vorbereiten, aber aus PORTE |= _BV(PE2); dnl Lichtschranke aktivieren ( port output and high ) PORTE |= _BV(PE3); dnl Lichtschranke aktivieren ( port output and high ) dnl hr20_lcd_putchar (2, 4); dnl 4 an stelle 2 schreiben hr20_lcd_putchar (0, HR20_LCD_CHAR_DEG); dnl 0 an stelle 0 schreiben dnl PB0 / PCINT8 Taste PCINT1 out pullup dnl PB1 / PCINT9 Taste PCINT1 out pullup dnl PB2 / PCINT10 Taste PCINT1 out pullup dnl PB4 / PCINT12 Rad PCINT1 out pullup dnl PB5 / PCINT13 Rad PCINT1 out pullup dnl PG3 T1 Motor Ansteuerung dnl PG4 T0 Motor Ansteuerung dnl PE2 Lichtschranke LED Out out pullup dnl PE3 Lichtschranke LED Out / Spannungs versorgung Input out pullup dnl PE4 Lichtschranke Input !!!gendert!!! Pin Change Interrupt4 PCINT4 in DEBUG("Startup C6"); dnl PCINT0 Pin Change Interrupt Request 0 dnl PCINT1 Pin Change Interrupt Request 1 dnl INT0 External Interrupt Request 0 dnl TIMER0 OVF Timer/Counter0 Overflow THREAD_START(motor) THREAD_START(update_temp) END CONTROL_END #include ISR(TIMER0_OVF_vect) { coun ++; if ( move >= 1 ) { delay ++; if ( delay >= speed ) { if ( dir == 1 ) { PORTG &= ~_BV(PG3) ; dnl PORTG(PG3) = 0 PORTG &= ~_BV(PG4) ; dnl PORTG(PG4) = 0 } else { PORTG &= ~_BV(PG3) ; dnl PORTG(PG3) = 0 PORTG &= ~_BV(PG4) ; dnl PORTG(PG4) = 0 } } else { if ( dir == 1 ) { PORTG |= _BV(PG3) ; dnl PORTG(PG3) = 1 PORTG &= ~_BV(PG4) ; dnl PORTG(PG4) = 0 } else { PORTG &= ~_BV(PG3) ; dnl PORTG(PG3) = 0 PORTG |= _BV(PG4) ; dnl PORTG(PG4) = 1 } } } } dnl uint8_t delay = 0; dnl ECMD_GLOBAL(pos, 0, uint16_t); dnl ECMD_GLOBAL(dir, 0, uint8_t); dnl ECMD_GLOBAL(move, 0, uint8_t); dnl ECMD_GLOBAL(speed, 0, uint8_t); ISR(PCINT0_vect) { DEBUG("pcint0"); if ( PORTE & ( 1 << 4 ) ) { DEBUG("pcint0 4"); } if ( dir == 1 ) { pos ++ ; DEBUG("pcint0 pos +"); } else { pos -- ; DEBUG("pcint0 pos -"); } } ISR(PCINT1_vect) { DEBUG("pcint1 +"); if ( (PINB & ( 1 << 0 )) == 0) { DEBUG("pcint1 0"); } if ( (PINB & ( 1 << 1 )) == 0) { DEBUG("pcint1 1"); } if ( (PINB & ( 1 << 2 )) == 0) { DEBUG("pcint1 2"); } dnl if ( (PINB & ( 1 << 3 )) != 0) { DEBUG("pcint1 3"); } if ( (PINB & ( 1 << 4 )) != 0) { DEBUG("pcint1 4"); } if ( (PINB & ( 1 << 5 )) != 0) { DEBUG("pcint1 5"); } dnl if ( (PINB & ( 1 << 6 )) != 0) { DEBUG("pcint1 6"); } dnl if ( (PINB & ( 1 << 7 )) != 0) { DEBUG("pcint1 7"); } } dnl if (! (PORTB & _BV(PB0) ) ) { DEBUG("pcint1 0"); } dnl if (! (PORTB & _BV(PB1) ) ) { DEBUG("pcint1 1"); } dnl if (! (PORTB & _BV(PB2) ) ) { DEBUG("pcint1 2"); } dnl if ( PORTB & _BV(PB4) ) { DEBUG("pcint1 4"); } dnl if ( PORTB & _BV(PB5) ) { DEBUG("pcint1 5"); } dnl if ( PIN_LOW (PORTB(PB0))) { DEBUG("pcint1 0"); } dnl if ( PIN_LOW (PORTB(PB1))) { DEBUG("pcint1 1"); } dnl if ( PIN_LOW (PB2)) { DEBUG("pcint1 2"); } dnl if ( PIN_LOW (PB4)) { DEBUG("pcint1 4"); } dnl if ( PIN_LOW (PB5)) { DEBUG("pcint1 5"); } dnl if (PIN_HIGH (pinname )) ... dnl dnl THREAD(output_data) dnl DEBUG("test"); dnl WAIT(10); dnl THREAD_END(output_data) dnl dnl THREAD_START(output_data) dnl dnl dnl PINB &= ~_BV(PINB0); dnl PINB &= ~_BV(PINB1); dnl PINB &= ~_BV(PINB2); dnl PINB &= ~_BV(PINB4); dnl PINB &= ~_BV(PINB5); dnl dnl MCUCR &= ~_BV(PUD); dnl dnl dnl struct key_press key; dnl dnl CONTROL_START dnl ON STARTUP DO dnl TCP_LISTEN(1332, message_handler); dnl END dnl TCP_HANDLER_PERSIST(message_handler) dnl for (;;) { dnl key = PS2_GET(); dnl if (key.keycode != 0) { dnl TCP_SEND("%c", key.data) dnl } dnl } dnl TCP_HANDLER_END(); dnl CONTROL_END dnl dnl PT_WAIT_UNTIL ((key = PS2_GET(), key.keycode != 0 )); TCP_SEND("%c", key.data") dnl