Programm geht nicht, so wie ich das will. Könnte da mal jmd drübersehen?

OP #924265
Lesenswert?

Hallo Leute,

Kann das so stimmen? Ich will ein Taktsignal über UART(TxD) senden und 
eine LED mit den 0,5kHz Takt ansteuern. Aber es funktioniert nicht?
Das soll ein reines Testprogramm für die UART Schnittstelle sein.

1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <avr/interrupt.h>
4

5
#define FOSC 7372800UL
6
#define BAUD 19200
7
#define MYUBRR (FOSC/16/BAUD-1)
8

9

10

11
void init_timer1 (void)
12
{
13
  TCCR1B = (3<<WGM12)|(2<<CS10);
14
  ICR1  = 1000;
15
  TIMSK |= (1<<TICIE1);
16
}
17
 
18

19

20
ISR (Timer1_Capt_vect)
21
{
22
  PORTC ^= (1<<PC5);
23
  UDR = 0x22;
24
}
25

26

27
void init_uart ( void )
28
{
29
  UCSRB |= (1<<TXEN);
30
  UCSRC |= (1<<URSEL) | (3<<UCSZ0);
31

32
  UBRRH  = ( MYUBRR >> 8 );
33
  UBRRL  = ( MYUBRR & 0x00FF );
34
}
35

36

37

38

39
void main (void)
40
{
41
  DDRC |= (1<<DDC5);
42
  PORTC |= (1<<PC5);
43
  init_uart(); 
44
  init_timer1 ();
45
  sei();
46
  while(1);
47
  {
48
  while(!(UCSRA & (1<<UDRE)))
49

50
    UDR = 0x23;
51
  }
52
  return (0);
53
}
Gast #924305
Lesenswert?

Wenn ich dir die Programme schon vorkaue, dann kopiere es wenigstens 
richtig!

"meine" main routine sah so aus:
1
void main (void)
2
{
3
  DDRC |= (1<<DDC5);
4
  PORTC |= (1<<PC5);
5
  init_uart(); 
6
  init_timer1 ();
7
  sei();
8
  while(1);
9
}

Und wie gesagt, wenn du an PC5 nicht mindestens halbe Betriebsspannung 
misst, stimmt was mit dem Vorgang des Programmierens nicht!


Was ich grad sehe:

An Pin20 MUSS ZWINGEND 3,3V und ein 100n C angeschlossen werden.
An Pin21 jedoch NICHT! Dort gehört NUR ein 100nF Kond. nach Masse hin!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren