Vidím, že jsi se ani za rok příliš s datasheetem nezabýval… No nic - hodím Ti sem kód z AVR Studia. Uino si kvůli Tobě opravdu instalovat nebudu, do uina si to přepiš sám. Předpokládám, že CTRL-Cizí → CTRL-Vlastní umíš a přežvýkat to tak, aby to uino zkouslo zvládneš. Druhá možnost je nainstalovat si AVR Studio, zkompilovat to v něm a uino použít jenom jako programátor. Kód je odzkoušený pouze v simulátoru AVR Studia, ale šlapat by měl tak, jak jsi psal : Po zapnutí 10s pauza, pak 1s impulz a po něm Power-down sleep až do nového zapnutí. Výstup je na pinu B0 a pull-up nebo pull-down si u něj musíš ošetřit externím odporem. U ostatních jsou aktivované pull-upy - proč to tak je se dočteš v datasheetu. A abys neřek, tak jsem přiložil i zkompilovaný HEX. Můžeš to porovnat s těma “obecnýma” bodama, které jsem Ti psal v předchozích příspěvcích.
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
ISR(TIM0_COMPA_vect, ISR_NAKED)
{
reti();
}
int main()
{
// Prepnuti vystupu do neaktivniho rezimu
PORTB = 0xFE;
DDRB = 0;
// Prepnuti systemovych hodin na 31,25 kHz
CLKPR = (1<<CLKPCE);
CLKPR = (1<<CLKPS3);
// Nastaveni casovace na 5 sekund
OCR0A = 152;
TIMSK = (1<<OCIE0A);
// Povolit preruseni
sei();
// Spustit casovac
TCCR0A = (1<<WGM01);
TCCR0B = (1<<CS02)|(1<<CS00);
// Aktivovat IDLE SLEEP MODE
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode(); // 5 sekund poprve
sleep_mode(); // 5 sekund podruhe
// Nastaveni casovace na 1 sekundu
OCR0A = 30;
// Aktivovat vystup na B0
PORTB |= 0x01;
DDRB |= 0x01;
// Aktivovat IDLE SLEEP MODE
sleep_mode(); // 1 sekunda
// Deaktivovat vystupy
PORTB &= ~0x01;
DDRB &= ~0x01;
// Zastavit casovac
TCCR0B = (0<<CS02)|(1<<CS00);
TCCR0A = (0<<WGM01);
// Zakazat preruseni
cli();
// Aktivovat POWERDOWN SLEEP MODE
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
while (1)
{
sleep_mode(); // Sleep az do vypnuti
}
}
Kompilováno v AVR Studio 4.19 + WinAVR.
mpcz.hex (500 Bytes)