Attiny 13A dwie diody migające na przemian program
Attiny 13A dwie diody migające na przemian program
Witam !
Potrzebuję darmowego programu w języku C, do Attiny 13A , i Atmega 8 A,aby na wyjściu, na nóżce PB0 był stan niski 120 sekund, a na nóżce PB1wysoki 120 sekund,duty cycle 50 %.
Chodzi o to aby dioda led zielona podłączona do PB0 katodą i do PB1 anodą zapalała się na 120 sekund a potem gasła na 120 sekund,abym sama w programie mogła zmieniać czasy od 20Hz do 10 minut.
Dioda led czerwona podłączona do PB0 anodą i do PB1 katodą gasła by i zapalała się co 120 sekund.
Gdy dioda zielona świeci 120 sekund w tym czasie dioda czerwona jest wyłączona na 120 sekund,gdy przestaje świecić dioda zielona,zapala się dioda czerwona na 120 sekund i tak w kółko,zielona świeci,czerwona nie świeci,czerwona świeci,zielona nie świeci,itd.
Czy do wgrania tego programu potrzeba ustawiać fusebity,jeśli tak to jakie.
Za program z góry dziękuję.
Pozdrawiam
Ada
Potrzebuję darmowego programu w języku C, do Attiny 13A , i Atmega 8 A,aby na wyjściu, na nóżce PB0 był stan niski 120 sekund, a na nóżce PB1wysoki 120 sekund,duty cycle 50 %.
Chodzi o to aby dioda led zielona podłączona do PB0 katodą i do PB1 anodą zapalała się na 120 sekund a potem gasła na 120 sekund,abym sama w programie mogła zmieniać czasy od 20Hz do 10 minut.
Dioda led czerwona podłączona do PB0 anodą i do PB1 katodą gasła by i zapalała się co 120 sekund.
Gdy dioda zielona świeci 120 sekund w tym czasie dioda czerwona jest wyłączona na 120 sekund,gdy przestaje świecić dioda zielona,zapala się dioda czerwona na 120 sekund i tak w kółko,zielona świeci,czerwona nie świeci,czerwona świeci,zielona nie świeci,itd.
Czy do wgrania tego programu potrzeba ustawiać fusebity,jeśli tak to jakie.
Za program z góry dziękuję.
Pozdrawiam
Ada
Ostatnio zmieniony niedziela 08 gru 2013, 19:07 przez Ada20, łącznie zmieniany 1 raz.
Witam
Codzi o zamieszczenie tutaj , tekstu programu.
Pozdrawiam
Codzi o zamieszczenie tutaj , tekstu programu.
Pozdrawiam
Ostatnio zmieniony niedziela 08 gru 2013, 15:37 przez Ada20, łącznie zmieniany 1 raz.
Pewnie jest do zrobienia zadanie domowe.
http://specjalistycznyspecjalista.blogspot.com/
POST MOŻE ZAWIERAĆ LOKOWANIE PRODUKTU
POST MOŻE ZAWIERAĆ LOKOWANIE PRODUKTU
Leniuszek... Niczego się w ten sposób nie nauczysz, Kolego Ada20
Sterownik extended v3.5 HE <klik>
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Kod: Zaznacz cały
/*
* LED.c
*
* Created on: 09-12-2013
* Autor: fredek
* CPU: ATtiny13A
* FUSEBIT: LOW=0x75 HIGH=0xFF
*/
#include <avr/io.h>
#include <avr/interrupt.h>
// definicje podłączenia portów
#define LED_PIN1 (1<<PB0) // dioda LED czerwona (anoda do portu PB0, katoda do PB1)
#define LED_PIN2 (1<<PB1) // dioda LED zielona (katoda podłączona do PB0, anoda do PB1)
// makra
#define LED_ON PORTB |= LED_PIN1; PORTB &= ~LED_PIN2;
#define LED_OFF PORTB |= LED_PIN2; PORTB &= ~LED_PIN1;
// definicje typów
typedef uint8_t u08;
typedef uint16_t u16;
// definicje opóźnień
#define WAIT 2400 // czas opóźniena: dla 120 sek = 20Hz * 120sek = 2400
// definicje zmiennych
volatile u08 led;
int main (void)
{
// inicjacja wyjść
DDRB |= LED_PIN1 | LED_PIN2 ; // ustawiamy rejest kierunkowy na wyjścia dla portów LED
// Ustawienie Timer0 CTC mode
TCCR0A |= (1<<WGM01); // tryb CTC
TCCR0B |= (1<<CS02)|(1<<CS00); // preskaler = 1024
OCR0A = 234; // ~ 20 Hz dla zegara 4,8 MHz
TIMSK0 |= (1<<OCIE0A); // Timer/Counter0 Output Compare Match
sei(); // włączenie przerwań
while (1) // główna pętla
{
if (led) { LED_ON } else { LED_OFF }
}
}
// ===== obsługa przerwanie 20 Hz =====
ISR (TIM0_COMPA_vect)
{
static u16 wait = WAIT;
if (!--wait)
{
wait = WAIT;
if (led) led=0; else led=1;
}
}
// koniec pracy domowej ;)
Skoro już jest temat z miganiem w C to może pochwalę się mniej zaawansowanym generatorem ale za to super oszczędnym:
Kod: Zaznacz cały
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define LED (1<<PB1)
#define kierunek DDRB
void inicjacje (void)
{
kierunek |= LED; //ustawienie pinu LEDa jako wyjśie, reszta jako wejścia
WDTCR |= (1<<WDTIE) | (1<<WDCE) | (1<<WDP3); //ustawienie przerwania od WD co 4s
sei(); //zezwolenie na przerwania
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //lub sleep_mode_idle jak bedzie ADC lub timer włączony
sleep_enable();
}
void oszczedzanie_pradu(void)
{
ACSR |= (1<<ACD); //wylaczenie komparatora
PRR |= (1<<PRTIM0) | (1<<PRADC); //wyłączenie ADC i TIMERa0
//napiecie odniesienia powinno zostac wylaczone jesli fusy od bodlvl sa wylaczone
}
int main(void)
{
inicjacje();
oszczedzanie_pradu();
while(1)
{
sleep_mode();
}
return 0;
}
ISR (WDT_vect)
{
PORTB ^= LED;
}
Ostatnio zmieniony wtorek 10 gru 2013, 11:59 przez ElSor, łącznie zmieniany 1 raz.
Witam
Fredek, dziękuję bardzo,dałam pierwszy program do sprawdzenia na Atmel Studio 6.1, nie ma błędów,ten Elsora drugi ma błędy.
Czy ktoś wie dlaczego u mnie program eXtreme Burner AVR nie działa,a program Sina Prog ,działa.
Jakie programy polecacie do obsługi ,wgrywania do mikroprocesorów.
Chyba zablokowałam Attiny 13a i A tmega 8 A ,jak je odblokować ,nie ma kontaktu miedzy mikrokontrolerem a programatorem USB.
Czy w tym programie trzeba zmieniać fuse bity,chyba nie.
Pozdrawiam
Fredek, dziękuję bardzo,dałam pierwszy program do sprawdzenia na Atmel Studio 6.1, nie ma błędów,ten Elsora drugi ma błędy.
Czy ktoś wie dlaczego u mnie program eXtreme Burner AVR nie działa,a program Sina Prog ,działa.
Jakie programy polecacie do obsługi ,wgrywania do mikroprocesorów.
Chyba zablokowałam Attiny 13a i A tmega 8 A ,jak je odblokować ,nie ma kontaktu miedzy mikrokontrolerem a programatorem USB.
Czy w tym programie trzeba zmieniać fuse bity,chyba nie.
Pozdrawiam