Witam
Problem zapewne dla wielu z Was banalny. Pracuję nad projektem, który wymaga bardzo krótkich czasów sygnałów, rzędu kilkudziesięciu ms. Opracowałem program, który co prawda poprawnie wysyła impuls, jednak jest on "bezpieczny" tylko dla długich czasów sygnałów. W moim przypadku istnieje duże ryzyko, że guzik zostanie przyciśnięty dłużej i urządzenie się wykrzaczy, bo sygnał był wysyłany za długo. Podsumowując: sygnał na wyjściu ma być zawsze taki sam, rzędu kilkudziesięciu milisekund, nie ważne jak długo będzie się wciskać guzik. Po puszczeniu guzika i jego ponownym wciśnięciu cykl ma zacząć się od nowa.
Zaznaczam, że jestem (mocno) początkującym w dziedzinie AVR i programowaniu ogólnie, dlatego też może po prostu istnieć jakaś funkcja, której wykorzystanie rozwiąże mój problem w dwie linijki, a ja o niej nie wiem.
Moich bazgrołów nie ma sensu tu zamieszczać, więc dam jedynie szkielet (działający) mojego programu który chciałbym rozbudować z Waszą pomocą.
Problem zapewne dla wielu z Was banalny. Pracuję nad projektem, który wymaga bardzo krótkich czasów sygnałów, rzędu kilkudziesięciu ms. Opracowałem program, który co prawda poprawnie wysyła impuls, jednak jest on "bezpieczny" tylko dla długich czasów sygnałów. W moim przypadku istnieje duże ryzyko, że guzik zostanie przyciśnięty dłużej i urządzenie się wykrzaczy, bo sygnał był wysyłany za długo. Podsumowując: sygnał na wyjściu ma być zawsze taki sam, rzędu kilkudziesięciu milisekund, nie ważne jak długo będzie się wciskać guzik. Po puszczeniu guzika i jego ponownym wciśnięciu cykl ma zacząć się od nowa.
Zaznaczam, że jestem (mocno) początkującym w dziedzinie AVR i programowaniu ogólnie, dlatego też może po prostu istnieć jakaś funkcja, której wykorzystanie rozwiąże mój problem w dwie linijki, a ja o niej nie wiem.
Moich bazgrołów nie ma sensu tu zamieszczać, więc dam jedynie szkielet (działający) mojego programu który chciałbym rozbudować z Waszą pomocą.
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000
int main(void)
{
DDRB = 0; // guzik - wejscie
DDRC = 0xFF; // dioda - wyjscie
PORTB |= _BV(0);
PORTC |= _BV(0); // dioda zgaszona
for(;;)
{
if(bit_is_clear(PINB, 0))
{
PORTC &= ~(_BV(0)); // dioda zapalona
_delay_ms(2500);
PORTC |= _BV(0); // dioda zgaszona
}
}
return 0;
}