Forum: Mikrocontroller und Digitale Elektronik RS232 Schnittstelle mit Bascom


von Tarnick (Gast)


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

von Markus (Gast)


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

von Tarnick (Gast)


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

von Tarnick (Gast)


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

von Norbert (Gast)


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

von Tarnick (Gast)


Lesenswert?

Hallo Norbert,

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

Gruß Reinhard

von Norbert (Gast)


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

von Markus (Gast)


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

von Norbert (Gast)


Lesenswert?

Hi,

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

Gruß,
Norbert

von Tarnick (Gast)


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

von Norbert (Gast)


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

von Tarnick (Gast)


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

von Norbert (Gast)


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

von Tarnick (Gast)


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

von Markus (Gast)


Lesenswert?

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

Markus

von Fritz Ganter (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.