mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 Schnittstelle mit Bascom


Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schlage mich schon stundenlang damit rum, die serielle
Schnittstelle mit dem Bascom Compiler anzusprechen.

Das Programm:
$regfile = "m16def.dat"
$crystal = 16000000                                         'Quarz: 16
MHz
$Baud    = 9600       'Baudrate der UART: 9600 Baud

Dim i As Byte
Dim wTest As Word

i = 1
wTest = 35000

Do
  Printbin i ; wTest
  Print "Hallo AVR: " ; i ; wTest
  Print "<--->" ;
Loop
End

Außer hin und wieder ein paar undefinierbare Zeichen empfange ich aber
nichts. (Hyperterminal)
Richtig angeschlossen ist alles. Der Signalpegel liegt bei +- 7,5
Volt.
Mega16, 9600 Baud

Wo könnte man den Fehler suchen ?

Gruß Reinhard

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat der Quarz wirklich 16MHz? (typisches Problem wenn man Code kopiert)

Wird der Quarz auch benutzt und nicht etwa der interne Oszillator mit
(Default: ) 1MHz. Kann man einfach testen: $Crystal-Zeile auf 1MHz
stellen.

Wozu dient das Printbin? Vielleicht verwirrt das ja das Hyperterm.

Markus

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

besten Dank für Deine schnelle Antwort.
Also der externe Quarz ist aktiv, wenn ich 1 Mhz einstelle, habe ich
eine wesentlich höhere Ausgangsfrequenz. Ich empfange jetzt auch alle
möglichen Zeichen (immer das gleiche Muster) nur nicht das was ich
sende.
Was die Zeile soll, weiß ich auch nicht, ich habe das Beispielprogramm
so übernommen. Hat aber nichts zu sagen, da ich das Ganze jetzt mit dem
Assemblerprogramm hier aus dem Tutorial getestet habe und das klappt
auch nicht. Hat also nichts mit Bascom zu tun.
Was mir gerade aufgefallen ist: Der Aufgangspegel liegt im Ruhezustand
auf -7,5 Volt. Der Pegel wird durch den Treiberbaustein (ADM222)
invertiert. Könnte es daran liegen ? Aber eigentlich machen das, glaube
ich, alle Schmittstellentreiber.


Gruß Reinhard

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

Du hast recht gehabt, der externe Oszillator war gar nicht aktiv !
Warum es dann nicht bei der Einstellung 1 MHz funktioniert hat, weiß
ich nicht. Jetzt habe ich den externen Oszillator aktiviert und es
funktioniert.

Na ja, noch 50 Minuten Zeit Männertag zu feiern, jetzt hole ich mir
erst mal ein Bier.

Gruß Reinhard

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Das ging deshalb mit 1MHz nicht, weil mit 9600 der Baudratenfehler irre
groß ist.
1MHz ginge mit 4800 wenn ich mich nicht irre.

Gruß,
Norbert

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norbert,

stimmt der Fehler würde bei 7% liegen, das kann nicht funktionieren.
Jetzt ist alles klar.
Besten Dank !

Gruß Reinhard

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Hast Du es denn mal mit 4800 bei 1MHz ausprobiert?
Ich habe das so vor und bin mir nicht so sicher, ob das mit dem
internen OSC so was wird.

Gruß,
Norbert

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem am internen Oszillator ist, daß er nicht temperaturstabil
ist. D.h., selbst wenn es jetzt läuft, dann kann es gut sein, daß es an
einem heißen Sommertag nicht mehr läuft.

Markus

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Das ist kein Problem, das wird in einem gut klimatisiertem Raum
betrieben, ich brauch das nur als arme-Leute Debugger.

Gruß,
Norbert

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norbert,

ich wollte es gerade mal probieren, aber ich bekomme den internen
Oszillator nicht mehr aktiviert.
In der Dokumentation steht CKSEL auf 0001 stellen. Habe ich gemacht,
aber es ändert sich nichts.
Gibt es da noch was zu beachten ?

Gruß Reinhard

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Hast Du auf Write FSB geklickt?

Geh im Programmer zum Buffer und wieder zurück, dann liest er die FB
wieder neu ein. Hat er's wirklich geschrieben?

Ich hab auch immer wieder Probleme damit bei Bascom, werde es jetzt mal
mit Ponyprog versuchen.

Gruß,
Norbert

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich mach es mit Ponyprog.
Gesetzt sind:
CKSEL0
SUT1
BOOTSZ0
BOOTSZ1
Im Programm steht:
$crystal = 16000000
$baud = 9600
In der Konfiguration von Bascom stehen auch 16 MHz
und Hyperterminal ist auf 9600 Baud gestellt.
Daten werden einwandfrei übertragen, also läuft der Mega16
doch mit 16 MHz. Warum der interne Oszillator nicht aktiviert
wird kann ich mir nicht erklären.

Ach so die Fuse Bits sind frisch ausgelesen und vorher habe ich das
Teil auch noch eine Weile von der Betriebsspannung getrennt.

Gruß Reinhard

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Du weisst, das CKSEL 0001 bei Ponyprog ein Häckchen bei 3,2,1 und keins
bei 0 bedeutet?

1 ist unprogrammed, 0 programmed.
Bei Ponyprog ist ein Häkchen 0.
Möchte mal wissen, was der Kerl sich dabei gedacht hat.

Wenns das nicht ist weiß ich auch nicht.

Wenn Du $Crystal und $Baud benutzt, überschreibt das die Einstellungen
in Bascom immer.

Gruß,
Norbert

Autor: Tarnick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Norbert,

das habe ich nicht gewußt !!!
Zum Glück läuft scheinbar der Mega16 auf extern wenn 1111 oder 0000
programmiert ist, ansonsten wäre ich daran schon gescheitert.

Also, das mit den 4800 Baud bei 1 MHz läuft ohne Probleme, 9600 geht
absolut nicht.

Besten Dank nochmals und einen schönen Abend allerseits.


Gruß Reinhard

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tarnick:
Das Ponyprog die Fuses invertiert steht doch dran. In mittelgrauer
Schrift auf hellgrauem Grund...

Markus

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich verwirrt das auch immer, obwohl es logisch ist.
Häkchen heisst einfach "programmed" kein Häkchen heisst
Originalzustand.
Da man nur Nullen programmieren kann ist es halt verdreht.

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.