Hallo, kann mir einer erklären, warum der Upload aus dem Atmel Studio mit dem Attiny841 fehlschlägt, wenn ein Gerät an UART1 angeschlossen ist PA4 (PCINT4/ADC4/AIN11/TOCC3/T1/RXD1/SCL/SCK) PA5 (PCINT5/ADC5/ACO0/TOCC4/T2/TXD1/MISO) Dafür muss UART1 nicht einmal im Programm aufgerufen werden, siehe auskommentierung.
1 | // tiny841_uart_test.c
|
2 | // ----------------
|
3 | // Created: 19.09.2014
|
4 | // Author: sschultewolter
|
5 | // Hardware: ATtiny841 5V 8MHz(internal Oscillator)
|
6 | |
7 | #include <avr/io.h> |
8 | #include <avr/interrupt.h> |
9 | |
10 | #include "uart0.h" |
11 | #include "uart1.h" |
12 | |
13 | volatile uint32_t millis; |
14 | |
15 | ISR(TIMER0_COMPA_vect) |
16 | {
|
17 | millis++; |
18 | }
|
19 | |
20 | |
21 | int main(void) |
22 | {
|
23 | // UART
|
24 | uart0_init(); |
25 | //uart1_init();
|
26 | |
27 | // millis
|
28 | TCCR0A = (1 << WGM01); // CTC Mode |
29 | TCCR0B |= (1 << CS01) | (1 << CS00); // Prescaler 64 |
30 | OCR0A = 124; // (F_CPU/PRESCALER)/1000-1 |
31 | TIMSK0 |= (1 << OCIE0A); // Compare Interrupt |
32 | sei(); |
33 | |
34 | while(millis < 5000); // warte 5s |
35 | |
36 | while(1) |
37 | {
|
38 | static uint16_t last_second; |
39 | uint16_t second = millis / 1000; |
40 | if(second != last_second) |
41 | {
|
42 | last_second = second; |
43 | |
44 | char str[10]; |
45 | itoa(second, str, 10); |
46 | |
47 | uart0_puts("\n\r"); |
48 | uart0_puts("UART0 <BAUD 19K2> :"); |
49 | uart0_puts(str); |
50 | |
51 | //uart1_puts("\n\r");
|
52 | //uart1_puts("UART1 <BAUD 38K4> :");
|
53 | |
54 | //uart1_puts(str);
|
55 | }
|
56 | }
|
57 | }
|
Welche Abhilfe kann man da schaffen, ausser das ich einen mechanischen Schalter/Jumper oder ähnliches dazwischen setzen muss. Einen Pin möchte ich dafür auch nicht verschwenden.
