Hi ich habe eine Verbindung mit dem AVR und einem Terminal Programm auf meinem PC. Bis eben lief es noch wunderbar jetzt feuer das Interrupt nicht mehr. Den Code hab ich wieder hergestellt und er funktioniert noch immer nicht. Verbindungen auf dem Steckbrett sind da und Empfangen kann ich noch mit dem Terminalprogramm daher ist die Verkabelung auch richtig. Kerndaten zum Project: Atmega16a interner RC Oszi Hier ist der Code:
1 | //definitions
|
2 | //define Taster
|
3 | #define T_DEBOUNCE 100
|
4 | #define TASTER_OK (PINA & (1 << PINA0))
|
5 | #define TASTER_UP (PINA & (1 << PINA1))
|
6 | #define TASTER_DOWN (PINA & (1 << PINA2))
|
7 | |
8 | //led
|
9 | #define LED_STATUS PD3
|
10 | |
11 | //define IIC Connection
|
12 | #define SCK PC7
|
13 | #define SCA PC7
|
14 | |
15 | //serial connection
|
16 | #define BAUD 2400
|
17 | #define MYUBRR F_CPU/16/BAUD-1
|
18 | #define RX_PIN PD0
|
19 | #define TX_PIN PD1
|
20 | |
21 | //define general
|
22 | #define F_CPU 1000000
|
23 | |
24 | //libarys
|
25 | #include <avr/io.h> |
26 | #include <util/delay.h> |
27 | #include <stdbool.h> |
28 | #include <avr/interrupt.h> |
29 | |
30 | //function prototypes
|
31 | //adc
|
32 | void adc_init(void); |
33 | int adc_read(unsigned char); |
34 | void adc_change_channal(unsigned char); |
35 | //uart
|
36 | void USART_Init(unsigned int); |
37 | void USART_Transmit(unsigned char); |
38 | void USART_String(char* str); |
39 | //led
|
40 | void init_io(void); |
41 | void led_flash(unsigned char); |
42 | |
43 | int main(void) |
44 | {
|
45 | //init io
|
46 | init_io(); |
47 | |
48 | sei(); |
49 | |
50 | USART_Init(MYUBRR); |
51 | |
52 | while(1) |
53 | {
|
54 | if(TASTER_OK) |
55 | {
|
56 | _delay_ms(T_DEBOUNCE); |
57 | if(!TASTER_OK) |
58 | {
|
59 | USART_String("OK"); |
60 | }
|
61 | }
|
62 | led_flash(1); |
63 | }
|
64 | return 0; |
65 | }
|
66 | |
67 | //functions
|
68 | //adc
|
69 | void adc_init() |
70 | {
|
71 | int result; |
72 | ADMUX = (1 << REFS1) | (1 << REFS0); |
73 | //einstellen des registers
|
74 | ADCSRA = (1 << ADSC) | (1 << ADPS2); |
75 | //eine wandlung starten
|
76 | result = adc_read(0); |
77 | }
|
78 | |
79 | void adc_change_channal(unsigned char channal) |
80 | {
|
81 | switch(channal) |
82 | {
|
83 | case(1): |
84 | ADMUX &= ~(1 << MUX0); |
85 | break; |
86 | case(2): |
87 | ADMUX |= (1 << MUX0); |
88 | break; |
89 | default:
|
90 | ADMUX &= ~(1 << MUX0); |
91 | break; |
92 | }
|
93 | }
|
94 | |
95 | int adc_read(unsigned char channal) |
96 | {
|
97 | int result; |
98 | |
99 | adc_change_channal(channal); |
100 | |
101 | //start measuring
|
102 | ADCSRA |= (1 << ADEN); |
103 | while(ADCSRA & (1 << ADSC)); |
104 | |
105 | result = ADCL; |
106 | result += (ADCL<<8); |
107 | |
108 | return result; |
109 | }
|
110 | |
111 | //uart
|
112 | void USART_Transmit( unsigned char data ) |
113 | {
|
114 | /* Wait for empty transmit buffer */
|
115 | while ( !( UCSRA & (1<<UDRE)) ) |
116 | ;
|
117 | /* Put data into buffer, sends the data */
|
118 | UDR = data; |
119 | }
|
120 | |
121 | void USART_String(char* str) |
122 | {
|
123 | while(*str) |
124 | {
|
125 | USART_Transmit(*str); |
126 | str++; |
127 | }
|
128 | }
|
129 | |
130 | void USART_Init( unsigned int ubrr) |
131 | {
|
132 | //unsigned char flush;
|
133 | |
134 | /* Set baud rate */
|
135 | UBRRH = (unsigned char)(ubrr>>8); |
136 | UBRRL = (unsigned char)ubrr; |
137 | |
138 | /* Enable receiver and transmitter */
|
139 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); |
140 | /* Set frame format: 8data, 1stop bit */
|
141 | UCSRC = (1<<URSEL)|(3<<UCSZ0); |
142 | |
143 | if(UCSRB & (1 << RXEN)) |
144 | {
|
145 | USART_String("RX enabled\n"); |
146 | }
|
147 | |
148 | if(UCSRB & (1 << RXCIE)) |
149 | {
|
150 | USART_String("RX Interrupt enabled\n"); |
151 | }
|
152 | |
153 | USART_String("UART Verbindung hergestellt...\n"); |
154 | }
|
155 | |
156 | //gpio
|
157 | void led_flash(unsigned char n) |
158 | {
|
159 | unsigned char i; |
160 | for(i = 0; i < n; i++) |
161 | {
|
162 | PORTD |= (1 << LED_STATUS); |
163 | _delay_ms(200); |
164 | PORTD &= ~(1 << LED_STATUS); |
165 | _delay_ms(200); |
166 | }
|
167 | }
|
168 | |
169 | void init_io(void) |
170 | {
|
171 | DDRA = 0x00; |
172 | PORTA = 0xff; |
173 | |
174 | DDRD = 0xff; |
175 | DDRD &= ~(1 << RX_PIN); |
176 | |
177 | PORTD = 0x00; |
178 | PORTD |= (1 << RX_PIN); |
179 | }
|
180 | |
181 | ISR(USART_RXC_vect) |
182 | {
|
183 | USART_String("Zeichen empfangen"); |
184 | }
|
Bitte um eure Hilfe