Warum immer die großen Teile? Atmega328P habe ich ein paar, aber die
sind im Aufbau aufwendiger. Benötige da in der Regel externe
Komponenten.
Edit ANFANG
Atmegax8P gibt es nicht als SOIC. DIP hab ich davon genug hier, die sind
viel zu groß. QFN/TQFN wollte ich nicht, da ich dafür keine Platinen
derzeit hab.
Edit ENDE
Der Attiny841 kann auch mit dem internen Oscillator problemlos am UART
hantieren. Die Atmegas kenne ich gerade nur vom Hörensagen. Was mir
einfach nur fehlt, wo ich den Takt der 32kHz abgreifen kann. Das soll
wie folgt aussehen, ich lasse den internen 32KHz Takt mitzählen und der
soll immer wenn er bei 255 und nach 0 wechselt einen Overflow Interrupt
auslösen. Das entspricht 7,8125ms.
1 | #ifdef TIMER_32KHZ
|
2 | ISR(TIMER0_OVF_vect)
|
3 | {
|
4 | s_128hz++;
|
5 |
|
6 | // DEBUG ONLY
|
7 | if(!(s_128hz % 64)) PORTB ^= GREEN; // 0.5 Hz
|
8 | // END DEBUG ONLY
|
9 | PORTB = RED;
|
10 | }
|
11 | #endif
|
12 |
|
13 | int main(void)
|
14 | {
|
15 | // LEDS
|
16 | DDRB |= RED | GREEN;
|
17 |
|
18 | // MILLIS_TIMER
|
19 | /*
|
20 | TCCR0A = (1 << WGM01); // CTC Mode
|
21 | TCCR0B |= (1 << CS01) | (1 << CS00); // Prescaler 64
|
22 | OCR0A = 124; // (F_CPU/PRESCALER)/1000-1
|
23 | TIMSK0 |= (1 << OCIE0A); // Compare Interrupt
|
24 | */
|
25 |
|
26 | // 32KHZ_TIMER
|
27 | // Overflow Interrupt erlauben
|
28 | // Löst alle 1/128s aus
|
29 | TIMSK0 |= (1 << OCIE0A);
|
30 | // Global Interrupt erlauben
|
31 | sei();
|
32 |
|
33 | while(1)
|
34 | {
|
35 | // ...
|
36 | }
|
37 | }
|