Nur in .: änderungen. diff -u ./avr.h .././avr.h --- ./avr.h 2011-06-21 04:25:56.000000000 +0200 +++ .././avr.h 2011-10-08 14:44:07.913861645 +0200 @@ -61,7 +61,10 @@ #define T_SAMPLE T_(15)-2 #else #warning "This will probably only work for relatively slow masters!" + //guenter #define T_SAMPLE T_(25)-1 // only tested for atmega32, works but out of specification! + // #define T_SAMPLE 3 + //guenter ende #endif #define T_XMIT T_(60)-4 // overhead (measured w/ scope on ATmega168) #endif @@ -236,6 +239,39 @@ static inline void AVR_ATtiny84_owpin_hiz(void) { DDRB &= ~4; } static inline u_char AVR_ATtiny84_owpin_value(void) { return PINB & 4; } +#elif defined (__AVR_ATtiny44__) +#define __CPU AVR_ATtiny44 + +static inline void AVR_ATtiny44_setup(void) +{ + CLKPR = 0x80; // Prepare to ... + CLKPR = 0x00; // ... set to 8.0 MHz +//guenter + TCCR0A = 0; + TCCR0B = 0x03; // Prescaler 1/64 + + MCUCR |= (1 << ISC00); // Interrupt on both level changes +} + +static inline void AVR_ATtiny44_mask_owpin(void) { GIMSK &= ~(1 << INT0); } +static inline void AVR_ATtiny44_unmask_owpin(void) { GIFR |= (1 << INTF0); GIMSK |= (1 << INT0); } +static inline void AVR_ATtiny44_set_owtimeout(timer_t timeout) +{ + TCNT0 = ~timeout; // overrun at 0xFF + TIFR0 |= (1 << TOV0); + TIMSK0 |= (1 << TOIE0); +} +static inline void AVR_ATtiny44_clear_owtimer(void) { TCNT0 = 0; TIMSK0 &= ~(1 << TOIE0); } +static inline timer_t AVR_ATtiny44_owtimer(void) { return TCNT0; } + +// use INT0 pin (PORT B2) +static inline void AVR_ATtiny44_owpin_setup(void) { PORTB &= ~4; DDRB &= ~4; } +static inline void AVR_ATtiny44_owpin_low(void) { DDRB |= 4; } +static inline void AVR_ATtiny44_owpin_hiz(void) { DDRB &= ~4; } +static inline u_char AVR_ATtiny44_owpin_value(void) { return PINB & 4; } + + + #elif defined (__AVR_ATmega168__) #define __CPU AVR_ATmega168 Nur in ../.: avr_uart.o. Nur in ../.: ds2408.bin. Nur in ../.: ds2408.eeprom. Nur in ../.: ds2408.hex. Nur in ../.: ds2408.lss. Nur in ../.: ds2408.map. Nur in ../.: ds2408.o. Nur in ../.: ds2408.out. Nur in ../.: ds2423.bin. diff -u ./ds2423.c .././ds2423.c --- ./ds2423.c 2011-06-21 04:25:56.000000000 +0200 +++ .././ds2423.c 2011-10-08 15:02:22.333858486 +0200 @@ -29,6 +29,8 @@ Note that sample frequency is approx. 8 kHz / NCOUNTERS. */ + +#define NCOUNTERS 2 #ifndef NCOUNTERS #define NCOUNTERS 2 #endif @@ -59,6 +61,16 @@ #define ADMSK PCMSK0 #define ADLARREG ADCSRB #define ADLARMUX 0 + +#elif defined(__AVR_ATtiny44__) +#define IFR GIFR +#define IMSK GIMSK +#define ADPIN PINA +#define ADPIN_vect PCINT0_vect +#define ADMSK PCMSK0 +#define ADLARREG ADCSRB +#define ADLARMUX 0 + #elif defined (__AVR_ATmega168__) #define IFR EIFR #define IMSK EIMSK @@ -335,10 +347,15 @@ void update_idle(u_char bits) { //DBG_C('\\'); - if(bits > 0 || unchecked > 100) +//guenter +// if(bits > 0 || unchecked > 100) + if (cbits > 0) check_adc(); - else if((ADCSRA & (1< $@ #------------------ burn: $(DEVNAME).hex $(DEVNAME).eeprom - avrdude -c $(PROG) -p $(MCU_PROG) -U flash:w:$(DEVNAME).hex:i -U eeprom:w:$(DEVNAME).eeprom:i +# avrdude -c $(PROG) -p $(MCU_PROG) -U flash:w:$(DEVNAME).hex:i -U eeprom:w:$(DEVNAME).eeprom:i + avrdude -P /dev/ttyUSB0 -c stk500 -p $(MCU_PROG) -U flash:w:$(DEVNAME).hex:i -U eeprom:w:$(DEVNAME).eeprom:i #avrdude -V -c $(PROG) -p $(MCU_PROG) -U $(PRG).bin #------------------- clean: Nur in ../.: old. diff -u ./onewire.c .././onewire.c --- ./onewire.c 2011-06-21 04:25:56.000000000 +0200 +++ .././onewire.c 2011-09-23 10:53:21.568498296 +0200 @@ -366,6 +366,7 @@ DBG_TIMER(T_RESET); DBG_TIMER(T_XMIT); + // save context to return to in case a command is either completed // or interrupted by a reset condition setjmp(end_out); @@ -401,6 +402,11 @@ OW_TIMER_ISR() { u_char pin, st = state & S_MASK; + + //guenter + // PORTA ^= (1 << 1); + //guenter ende + pin = owpin_value(); // sample immediately clear_owtimer(); // DBG_C(pin ? '!' : ':'); @@ -555,6 +561,10 @@ /* all but XMIT2 bit */ u_char st = state & S_MASK; + //guenter + // PORTA ^= (1 << 1); + //guenter ende + if (owpin_value()) { /* low to high transition */ //DBG_C('^'); @@ -665,7 +675,11 @@ else { DBG_C('c'); set_idle(); - } + } + +//guenter + // PORTA ^= (1 << 1); + //guenter ende } diff -u ./onewire.h .././onewire.h --- ./onewire.h 2011-06-21 04:25:56.000000000 +0200 +++ .././onewire.h 2011-09-23 10:05:45.029324130 +0200 @@ -16,6 +16,8 @@ * for more details. */ /* Debugging */ +#include "features.h" + #ifdef HAVE_UART #include "uart.h" Nur in ../.: onewire.o. Nur in ../.: taliesin-owslave-7a5d221. Nur in ../.: taliesin-owslave-7a5d221.zip.