Zde je kod. Na konci metody incStep uz chybi jen zobrazeni cisla na displej, pro zkraceni veci okolo LCD vynechavam.
Jazyckovy kontakt je jednou nohou na INT0, druhou na zemi. Pri priblizeni magnetu se sepne.
Jeste doplnim, ze je to odnekud obslehnute...
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 1000000L
#endif
#include <avr/delay.h>
#define sbi(port, bit) (port) |= (1 << (bit))
#define cbi(port, bit) (port) &= ~(1 << (bit))
static volatile uint8_t xxint0 = 0x00;
void incStep() {
if ( xxint0 >= 0xFF )
xxint0 = 0x00;
else
xxint0++;
}
SIGNAL(SIG_INTERRUPT0) {
if ( !(PIND & (1 << PD2)) ) {
_delay_ms(5);
if ( PIND & (1 << PD2) ) {
_delay_ms(5);
incStep();
}
}
}
int main(void) {
_delay_ms(100);
DDRD &= ~( 1 << PD2 );
PORTD |= ( 1 << PB2 );
_delay_ms(5);
GICR |= 1 << INT0;
cbi(MCUCR, 0);
cbi(MCUCR, 1);
sei();
while ( 1 ) {
}
}
Příspěvky odeslané z IP adresy 89.103.48.–
morganzd
Jeste dodam ze to delam na atmega8 a zachytavam INT0.
morganzd
Zdravim vas.
Prosim zkusene o radu s osetrenim zakmitu jazyckoveho rele. Existujici navody na netu se tykaji bouhuzel jen osetreni klasickych tlacitek, aspon tak jsem nasel. Nevim si rady jak se vyrovnat se zakmity jazyckoveho kontaktu, u ktereho je potreba dodrzet rozliseni 30ms mezi dvema sepnutimi.
Dekuji za radu a prip. ukazku v C.