Koukam konecne nekdo, kdo se nenechava odradit prvotnim neuspechem a nepredelava hnedka celej koncept podle "rad" lidi co pouzivaji radeji neco uplne jineho nez by neco resili.
Protoze slavne arduino nevlastnim .. mam jenom klasickej USB programator, tak ani zadne arduino kody neresim :d
S pinem 5 mam taky problem (mam na hrani atiiny13 coz je v podstate to same s mensi pameti a nakou tou drobnosti)- i pres zablokovani H fuses na FE, mi analog na pinu 5 bohuzel nefunguje ADC0, ostatni funguji.... Jenom jaksi nesel programovat vicero cip a musel jsem ho smaznout fusebitdoctorem .... Docela by se mi to ale hodilo, nebot bych rad udelal vystup pro simulator na zvukovku na vysilacce vrtulniku F45 ...ci jakekoliv jine ...a na to potrebuju 4x analog .. coz bez pinu 5 nepujde ...
Takze servo lze rozjet uplne "suse" (nenasel jsem zadny funkcni servotester v hexakodech na netu, tak sem si udelal vlastni kod v atmelstudiu pomoci spousty a spousty stranek plnych nepresnych az spatnych casti kodu...nektere funkcni

) opakovanim po cca 20ms delkou pulsu od cca 1 do 2 ms ....
#define F_CPU 9600000UL // Define software reference clock for delay duration Must be write before call delay.h
#include <avr/io.h> //Vlož knihovnu vstupů a výstupů (PORT, DDR, PIN)
#include <util/delay.h> //Knihovna čekacích funkcí (delay=čekej [ms])
#include <avr/interrupt.h>
#include <stdbool.h>
int preruseni = 0;
bool sekunda = false;
int _20ms = 0;
int maxpreruseni = 15;
int analogPB4 = 0;
int ReadADC_PB4() //read analog from PB4
{
ADMUX |= (0 << REFS0); // VCC as Reference
ADMUX |= (1 << MUX1) | (0 << MUX0); // ADC2 PB.4
ADCSRA |= (1 << ADEN); // Enable ADC
ADMUX |= (0 << REFS0); // VCC as Reference
Tento radek je zbytecny ADMUX = 2;// ADC2 PB.4
Tento radek je zbytecny ADCSRA |= (1 << ADSC); // Start Converstion
while((ADCSRA & 0x40) !=0){}; //wait for conv complete
return ADC;
}
ISR(TIM0_OVF_vect) {
//overflow occurs at 1024or8or1/9600000*256=XXXms/XXXHz
_20ms++;
preruseni++;
if (preruseni >= 29512) // prescale timer 1s / 27ms = pri 1024 je to 37, pri 8 je to 3689, pri 1 je to 29512
{
preruseni = 0;
sekunda = true; // set flag sekunda
}
if (_20ms >= 592) // Zhruba 592x preruseni = 20ms
{
_20ms = 0;
PORTB = 0b000000;
}
analogPB4 = ReadADC_PB4();
maxpreruseni = (analogPB4/16) + 20; // tady potreba doladit jeste cisla 16 a 20 pro plny rozsah potenciometru
if (_20ms < maxpreruseni) {
PORTB = 0b000111; // All PB0, PB1, PB2 same output - for eperiments... need only 1 for servo..
} else {
PORTB = 0b000000;
}
sekunda = false; // reset flag
}
int main(void) {
cli();
DDRB = 0b000111; //set port B pins 0,1,2 as output
PORTB = 0;
TCCR0B |= (1<<CS00); //prescale timer to 1
TIMSK0 |= (1<<TOIE0); //enable timer overflow interrupt
sei();
while(1);
}
Pojistky Low 7A High FF ... zapojeni, hexa,... dodam na prani
Uz to funguje - chyba byla prave v te funkci cteni ADC kterou jsem spatne pochopil a tim padem spatne upravil pro PB5 (nahodou to totiz vychazi na PB3 pri pouziti ADMUX = PINB3; onech binarnich 1 1 coz je presne ten prepinac MUX 1 a 0 ktery potrebujeme
)Bez
http://pe0fko.nl/Fuse-restore/ tohoto, nebo jineho fusebit restorera, ale rozhodne zablokovat reset nedoporucuju. Jinak postup nahrat program a pote pojistky s tim ze blokovani resetu udelame na konec funguje spolehlive...
Ten fusebit doctor z odkazu mi fungoval na prvni zapojeni ... stavba bezproblemu (bohuzel delane na uni DPS ...)