PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR-CDC ist bockig (USB per AVR)



screwdriver
11.03.2009, 09:47
Hallo zusammen!

Ich habe mir eine kleine Platine nach angehängtem Schaltplan angefertigt. Die Schaltung soll ein kleines Terminal darstellen.

Zur Inbetriebnahme der Platine habe ich dann von der AVR-CDC-Seite
http://www.recursion.jp/avrcdc/
die Hex-Datei für die Version mit Attiny45 @12MHz auf einen Attiny aufgespielt und die Fusebits laut Readme programmiert.
Anschließend habe ich auf meinem m644 folgendes Testprogramm aufgespielt und die Fusbits natürlich auf externen Quarz programmiert.


'************************************************* ******************************
'*** Testprogramm für CPU Board CPU32GUSB 20090114 ***
'*** Empfängt über die serielle Schnittstelle einen Textstring und gibt ***
'*** ihn zeilenweise auf einem grafischen LCD aus. ***
'************************************************* ******************************
'************************************************* ******************************

'Quarzfrequenz festlegen
$crystal = 20e6
$baud = 4800

Config Serialin = Buffered , Size = 32

'Display konfigurieren
$lib "glcdKS108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 3 , Ce2 = 4 , Cd = 7 , Rd = 6 , Reset = 2 , Enable = 5
Setfont Font6x8

Config Portd.7 = Output 'LCD-Backlight
Set Portd.7 'Backlight on

'Variablen
Dim Text$ As String * 40
Dim Zeichen As Byte 'Von ATtiny empfangenes Zeichen
Dim Zeile As Byte , Spalte As Byte

'************************************************* ******************************
'*** HAUPTPROGRAMM ***
'************************************************* ******************************

Enable Interrupts

Cls

Zeile = 1
Spalte = 0

Do
Input Text$
If Len(text$) <= 16 Then
Lcdat Zeile , Spalte , Text$
Spalte = 0
Incr Zeile
If Zeile > 8 Then Zeile = 1
End If
Loop
End

'_************************************************ ******************************

'Fontdatei
$include "font6x8.font"


Fazit:
Beim Verbinden meiner Platine mit meinem Pc per USB-Kabel wird ein virtueller Comport erzeugt.
Als Terminalprogramm benutze ich das Bascom-Terminal. Meistens klappt es dann mit der Kommunikation, manchmal muss ich jedoch Terminal oder auch den m644 neustarten.
Leider hängt sich der AVR-CDC nach ein paar Zeichen (ca. 5 bis 20) auf und ich muss alles wieder neustarten...

Hat sonst noch jemand Erfahrungen mit AVR-CDC, insbesondere mit der Attiny45-Version, gemacht, und möchte sich dazu äußern?

screwdriver
13.03.2009, 16:40
Hallo zusammen!

Ich habe gerade mal dieses Hauptprogramm in obigen Quellcode eingebaut.


'************************************************* ******************************
'*** HAUPTPROGRAMM ***
'************************************************* ******************************

Enable Interrupts

Cls

Zeile = 1
Spalte = 0
Do
Input Text$
If Len(text$) <= 21 Then
Lcdat Zeile , Spalte , Text$
Incr Zeile
If Zeile > 8 Then Zeile = 1
End If
Loop
End



Solange ich die Zeicheneingaben über Bascom-Terminal schön langsam (> 1 Sek/Zeichen) arbeitet alles stabil, bei schnellerer Eingabe stürzt dann wie gehabt AVR-CDC ab und ich muß meine Schaltung und Terminal neustarten.

Ersetze ich die Zeile
Input Text$
durch
Input Text$, noecho
funktioniert es auch bei schnellerer Zeicheneingabe.

Ich kann nur vermuten, dass aufgrund der hohen µP-Auslastung für das USB-Protokoll für die Soft-Uart zuwenig Rechenzeit übrig bleibt.

felack
17.03.2009, 16:26
Hallo srewdriver,

ich kann deine oben gemachte Annahme bestätigen. Ich habe den CDC mit dem ATtiny2313 gebaut. Bei 9600 Baud funktioniert alles noch problemlos, bei 38400 Baud muss man nach jedem Byte, das der AVR zum PC sendet eine Pause einbauen, sonst kommt nur noch die Hälfte der Zeichen beim PC an. Da bleibt wohl wegen der USB-Kommunikation zu wenig Zeit übrig.

felack

screwdriver
20.03.2009, 16:09
Hi felack,

danke für deine Wortmeldung. Ich spielte eigentlich schon mit dem Gedanken bei meiner nächsten Bauteilebestellung einen Attiny2313 mitzuordern. Sieht so aus, dass ich bei FTDI doch glücklicher werde - trotz der Löterei.
Aber wundern tut es mich doch schon, dass der Attiny2313 - trotz Hardware UART - immer noch Probleme macht. Ich dachte, es läge nur an der Soft-UART beim Attiny45.

Sonst noch jemand, der seine Erfahrungen mitteilen möchte?

Gruß,
screwdriver

christian_u
20.03.2009, 16:58
Die Soft USb braucht natürlich alle 40ms mal etwas Rechenleistung in der auch die Interrupts aus sein müssen ist also logisch das man damit keinen kontinuierlichen Datenstrom hinkriegt.

Irgendwo muss der Preisunterschied von 2 Eur ja auch herkommen ;)

felack
20.03.2009, 20:39
Mit 9600 Baud funktioniert der CDC mit ATtiny2313 einwandfrei, nur bei höheren Baudraten gibt es Probleme.

felack