ATTINY2313 - Peter Fleury's UART Library

Gast #3109745
Lesenswert?
• ▲
▼
Hallo allerseits,

ich habe in einem Projekt mit dem Mega32 die UART-Library von Peter 
Fleury erfolgreich benutzt.
Beim Versuch dieses Projekt auf einen Tiny2313 zu portieren habe ich das 
Problem, dass per UART nichts gesendet wird.

Ich habe dann ein Minimalbeispiel aus dem Sample-Code auf P. Fleury's 
Website erstellt:
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include <avr/pgmspace.h>
5
#include <util/delay.h>  
6
#include "uart.h"
7

8
#ifndef F_CPU 
9
#define F_CPU 8000000UL
10
#endif
11

12
#define UART_BAUD_RATE      9600      
13

14
int main(void)
15
{
16
    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
17
    sei();
18
    
19
    uart_puts_P("V Test\n");
20

21
    while(1) { }
22

23
    return 0;
24
}

Dabei habe ich bemerkt, dass das Senden über UART immer dann nicht 
funktioniert, wenn ich "delay.h" einbinde (im Beispiel zwar nicht 
notwendig, aber in meinem eigentlichen Projekt schon).

Hat jemand eine Idee wo das Problem sein könnte?

Vielen Dank und viele Grüße

Bernd
Gast #3109780
Lesenswert?
• ▲
▼
Danke, das musste ich in der Tat umstellen, dann ging der Testcode.

Ich habe mir nochmal meinen Projektcode angeschaut (da hatte ich es in 
der richtigen Reihenfolge)

Ob über den UART etwas gesendet wird hängt davon ab welche Größe meine 
Arrays haben.

Ich habe mal ein paar Test in den Code gepackt und auskommentiert.
Komisch beim Mega32 hatte ich das nicht.

Es ist fast so, als ob die beiden Array zusammen nicht über 19 Elemente 
kommen dürfen...

(ich verwende AVR Studio 4.18 und WinAVR 20100110).

Hier noch einmal ein Beispiel:
1
#ifndef F_CPU
2
#define F_CPU 8000000UL
3
#endif
4

5
#define UART_BAUD_RATE 9600      
6

7
#include <stdlib.h>
8
#include <avr/io.h>
9
#include <avr/interrupt.h>
10
#include <avr/pgmspace.h>
11
#include <inttypes.h>
12
#include <util/delay.h>
13

14
#include "uart.h"
15

16
/* Geht
17
int test[15];
18
char test2[4];
19
//*/
20

21
/* Geht auch
22
int test[16];
23
char test2[3];
24
//*/
25

26
///* Geht nicht
27
int test[16];
28
int test2[4];
29
//*/
30

31

32
int main(void) 
33
{
34
  cli();
35
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
36
  sei();
37
  uart_puts("V Starte IR-Relais...\r\n");  
38

39
  while(1) { }
40

41
  return 0;
42
}
Gast #3109791
Lesenswert?
• ▲
▼
Hallo Kai,

danke für deinen Beitrag.
Du hast wohl recht, unten im Buildfenster sehe ich auch:

"Data:        133 bytes (103.9% Full)"

Da ist dann wohl wirklich der RAM voll.

In meinem richtigen Projekt sinds sogar "179 bytes (139.8% Full)".

Kann man da noch irgendwie tricksen oder sollte ich gleich einen Mega8 
nehmen (der fliegt hier noch so rum)?
Wirklich teurer ist er ja auch nicht.

Viele Grüße

Bernd

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.