Strona 1 z 2
Attiny 13A dwie diody migające na przemian program
: niedziela 08 gru 2013, 13:44
autor: Ada20
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
: niedziela 08 gru 2013, 13:51
autor: Pyra
Witam
Przepraszam że pytam, chodzi o praktyczne rozwiązanie problemu, czy jakiegoś zadania?
Pozdrawiam
: niedziela 08 gru 2013, 13:58
autor: Ada20
Witam
Codzi o zamieszczenie tutaj , tekstu programu.
Pozdrawiam
: niedziela 08 gru 2013, 14:48
autor: joon
Hmmm, 3 forum na którym widzę tą samą "prośbę"
: niedziela 08 gru 2013, 15:59
autor: Fluxor
Pewnie jest do zrobienia zadanie domowe.
: niedziela 08 gru 2013, 16:05
autor: krzycho_
Zadanie na 5 min
Nie potrzeba zmieniać fuse'ów na fabrycznym zegarze będzie działać.
Witam
Codzi o zamieszczenie tutaj , tekstu programu.
Pozdrawiam
Żartujesz
Wszystko by chcieli gotowe na tacy...
: niedziela 08 gru 2013, 16:26
autor: greg
Leniuszek...
Niczego się w ten sposób nie nauczysz, Kolego
Ada20
: niedziela 08 gru 2013, 18:49
autor: Pyra
Witam
Ada20 pisze:Chodzi o zamieszczenie tutaj , tekstu programu.
Tylko, że to nie jest odpowiedź na moje pytanie.
Pozdrawiam
: poniedziałek 09 gru 2013, 18:40
autor: fredek
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 ;)
Ada20 Pochwal się chociaż oceną jaką dostałeś z tej pracy domowej
: poniedziałek 09 gru 2013, 19:15
autor: ElSor
fredek, widzę "szkołę" Mirka i kilka ciekawych trików. Ciekawe czy koleżanka (Ada20) mimo komentarzy rozgryzie działanie tego.
: poniedziałek 09 gru 2013, 19:27
autor: fredek
ElSor, zgadza się
był to ciekawy przerywnik bo czeka mnie aktualnie lektura Pana Bruce Eckel czyli książeczki Thinking in Java, to jest dopiero jazda
: poniedziałek 09 gru 2013, 19:41
autor: ElSor
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;
}
: poniedziałek 09 gru 2013, 20:04
autor: fredek
ElSor, wygląda ciekawie, do jakiego poboru prądu z procka schodzisz ?
: poniedziałek 09 gru 2013, 20:07
autor: ElSor
Nie chcę strzelać ale przy zasilaniu z ogniwa 18650 było chyba mniej niż w datasheecie dla ATTiny 13A.
Power-Down Mode , WDT enabled, VCC = 3V = typ 3.9 ; max 10 μA
: wtorek 10 gru 2013, 11:24
autor: Ada20
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