www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM Fehler mit Baudraten


Autor: Peter Kaiser (opa-peter)
Datum:
Angehängte Dateien:
  • preview image for 1.jpg
    1.jpg
    28,3 KB, 218 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ürsprunglich vermutete ich das Problem woanders daher hier ein neuer 
Thread.

Der Versuch den AVV (ATMega128 mit 16MHz) mit RS232 funktioniert nicht 
wie in dem Datenblatt angegebenen Baudraten.

Bsp: Programm
-----------
$baud1 = 9600
Open "COM2:" For Binary As #1
  Print #1 , "Hello World"
Close #1
End
-----------
Funktioniert mit Windows Hyper Terminal wunderbar.
Bei $baud1 = 19200 geht es auch
Bei $baud1 = 4800 geht es auch
Bei $baud1 = 2400 geht nichts
Bei $baud1 = 1200 kommt Schrott

Selbstverständlich habe ich die passenden Baudraten in Hyper-terminal 
eingegeben. Ich gehe auch nicht davon aus das es etwas mit der oft 
Diskutierten Genauigkeit auf sich hat, den im Compilierungsprotokoll mit 
$baud1 = 2400 steht:
----------------------
...
FLASH USED   :  2  %
BAUD         : 9600 Baud
XTAL         : 16000000 Hz
BAUD error   : 0.16%
BAUD1        : 2400 Baud
BAUD1  error  : 0.08%
....
-----------------------

Interessant aber vielleicht nicht von Belang ist das wenn man bei den 
Compile Optins/Communications 2400 Baud bei 16 MHz einträgt erscheint 
"not possible". Übrigens bei allen Baud raten < 4800.
Hat Bascom da einen internen Teiler falsch definiert oder was kann hier 
Abhilfe schaffen?

Schönen abend noch
Peter

Autor: tt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nimm einen externen Quarz

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier doch mal, das USART per Hand auf die gewünschte Baudrate 
einzustellen.
Wenn du dann zu funktionsfähigen Ergebnissen kommst, dürftest du ein 
Bascom-Bug gefunden haben.

Autor: Peter Kaiser (opa-peter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Der AVC wird mir einem externen Quartz getaktet.
Aber wie kann ich das USART "manuell" einstellen???
Gruß
Peter

Autor: schrotti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
über die Konfigurationsregister (direkt setzen). Vielleicht stellst Du 
beim Register suchen im Datenblatt auch fest, daß diese Baudrate nicht 
unterstützt wird.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>2400 Baud bei 16 MHz einträgt erscheint
>"not possible". Übrigens bei allen Baud raten < 4800.

Da hat er Recht, das ist nicht possierlich, äh möglich.:-)

Das liegt nicht an Bascom, denn auch das kann den inneren
Aufbau des AVR nicht ändern. ;-)

MfG Paul

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann wrote:
>>2400 Baud bei 16 MHz einträgt erscheint
>>"not possible". Übrigens bei allen Baud raten < 4800.
>
> Da hat er Recht, das ist nicht possierlich, äh möglich.:-)
Doch, sollte gehen. 2400 Bd sogar mit 0 % Fehler bei gesetztem U2X, 4800 
Bd mit -0,1 %. Wenn das nicht reicht...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch's mal damit, das wird nur noch wackliger, weil nur noch die 
halbe Zeit zum Abtasten zur Verfügung steht. (Beschreibung zu UC2X im 
Datenblatt
Mega 128)

2400 Baud=16 Mhz/(8*832)+1

UBRR=832

In UCSRA muß noch das Bit für UC2X gesetzt werden.

Nicht alles, was theoretisch funktioniert, geht auch in Natura 
zuverlässig.

MfG Paul

Autor: Peter Kaiser (opa-peter)
Datum:
Angehängte Dateien:
  • preview image for 1.jpg
    1.jpg
    66,8 KB, 207 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip, ich als Dummer BASCOM Anwender bin nicht wirklich fit 
mit diesen direkten Registern. wenn ich es Richtig verstanden habe muss 
ich
in Adresse $99 "01000000" (64 da LB) und in
   Adresse $98 "00000011" (768 da HB) schreiben

Das sind dann die 832 für den Teiler. Right??
Gruß
Peter

Autor: Peter Kaiser (opa-peter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VIELEN DANK!!
Scheint ein echter BASCOM Bug zu sein. Folgender Code:
-------------------------
$baud1 = 9600
...
Open "COM2:" For Binary As #1

'++++++++++++++UBRR auf 416 setzen+++++
Out $0099 , &B10100000                                'LB  128 + 32
Out $0098 , &B00000001                                'HB  256
'+++++++++BAUDRATE ist jetzt 2400!!++++++++

 Print #1 , "Hello World"
Close #1
--------------------------------------
funktioniert. D.h. Die vom Compiler generierten Werte einfach manuelle 
überschreiben.

Nochmals Dank & einen schönen Abend

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass dir doch mal die Alten werte anzeigen.

Autor: Peter Kaiser (opa-peter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für Eure Mühe habe ich nachgeschaut...

Compiliert mit $Baud = 2400
steht im UBRR Low Byte  der richtige wert "10100000"
      im UBRR High Byte leider "00000000" statt "00000001"

Compiliert mit $Baud = 9600 werden beide Register richtig beschrieben...

So long
Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Sieht so aus, als ob BASCOM UBRRH intern nicht benutzt. Das würde auch 
die 'Aussage' 'not possible' erklären.

MfG Spess

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 wrote:
> Sieht so aus, als ob BASCOM UBRRH intern nicht benutzt. Das würde auch
> die 'Aussage' 'not possible' erklären.
Das wäre allerdings ein ziemlich übler Bug. Wäre wieder ein schöner 
Anlass für die BASCOM-Basher...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das wäre allerdings ein ziemlich übler Bug. Wäre wieder ein schöner
> Anlass für die BASCOM-Basher...

Hier braucht man nichts zu bashen, BASCOM hat doch schon ein Eigentor 
kassiert, das reicht.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Hier braucht man nichts zu bashen, BASCOM hat doch schon ein Eigentor
> kassiert, das reicht.
Eben, ein Eigentor ist meist Anlass zur offenen Schadenfreude...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. -> Basic Hasser? -> ja

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus wrote:
> Johannes M. -> Basic Hasser? -> ja
Nö. Ich selber bin absolut kein pauschaler BASCOM-Hasser.

Autor: Bascomfehler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das darf man nicht so eng sehen.
Und immer ruhig durch die Hose atmen.

Autor: pippoppip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...du denkst wohl es gaebe nur ein 16 MHz Quarz .
Der Fehler liegt wohl in deiner unflexiblen Haltung
bzw mangelnden Erfahrung...

Autor: Peter Kaiser (opa-peter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...du denkst wohl es gaebe nur ein 16 MHz Quarz .
> Der Fehler liegt wohl in deiner unflexiblen Haltung
> bzw mangelnden Erfahrung...

1) Nein
2) versteh ich nicht
3) kann sein.

Autor: MWS (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Kann den Code mangels angeschlossenem M128 nicht testen, weis aber nicht 
wo das Problem beim Options Dialog liegt, musst halt auf eine aktuelle 
Version updaten.

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UBRRH gibt es nicht bei allen AVRs, daher wird CONFIG von BASCOM es 
nicht unterstützen. Im Übrigen sind die AVRs dermaßen unterschiedlich 
mit Hardwarefeatures ausgestattet, dass mit CONFIG ein Großteil der 
Features gar nicht unterstützen kann.

Der größte Fehler im BASCOM-Konzept ist das ja Implementieren der 
CONFIG-Anweisung für Hardware, die sich im AVR befindet (Timer, ADC, 
U(S)ART, usw.). Dies hält die Nutzer davon ab, sich die Bit- und 
Byte-Namen der I/O-Register aus dem Datenblatt herauszusuchen und die 
Werte direkt zuzuweisen. Das hält sehr viele Benutzer sogar davon ab, 
überhaupt mal ins Datenblatt des verwendeten AVRs zu schaun.

Nein, ich kritisiere nicht die CONFIG-Anweisung in Verbindung mit 
Softwaremodulen wie LCD-Treiber usw., da ist das schon sinnvoll. Aber so 
etwas wie CONFIG PORT, CONFIG TIMER, CONFIG ADC, CONFIG UART (oder wie 
immer das genannt wird) braucht die Welt nicht, das ist eher 
kontraproduktiv.

Ich habe nichts gegen BASIC allgemein, aber mit BASCOM kann ich mich bei 
den knappen Ressourcen der AVRs beim besten Willen nicht anfreunden. Ein 
kleines schlankes Tiny-BASIC hätte mich aber vermutlich überzeugt, so 
mit den Möglichkeiten, oft gebrauchte Variablen in Registern zu halten, 
schnellen Interrupts (ohne sinnfreie Sicherung unbenutzter Register) und 
Verzicht auf viel unnötigen Ballest. Aber nun ist es eh' zu spät, nun 
werkele ich in ASM. Und das ist gut so!

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.