Servus Leutz,
also da ihr mir hier schon so gut wegen dem Display helfen konnten,
stell ich wieder ne Frage...
Und zwar wegen dem UART meines ATMEGA16. Normalerweise sollte doch
Bascomtechnisch mit dem Code alles Paletti sein, aber er hat nur
konstant 5 V an RX und an TX...
-------------------------------------------------
$crystal = 14745600
$regfile = "m16def.dat"
$baud = 2400
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.3 , Db6 = Porta.1 ,
Db7 = Porta.0 , E = Porta.5 , Rs = Porta.6
Config Lcdbus = 4
Initlcd
Wait 1
Cls
Upperline
Lcd "LCD Aktiv"
Wait 1
Lowerline
Lcd "Initialisiere Com"
Open "comd.1:2400,8,n,1" For Output As #1
Wait 1
Thirdline
Lcd "Comport geoeffnet"
Dim I As Integer
I = 0
Do
Print #1 , "HALLO"
Wait 1
Cls
Upperline
Lcd "Hallo gesendet"
Lowerline
Lcd I
Wait 1
I = I + 1
Loop Until I = 32768
Close #1
---------------------------------------------------------------
Gemessen hab ich das ganze mit einem Oszi auch schon. Es kommen wirklich
nur konstant 5 V sobald der MC ein ist.
Den Befehl:
Config Serialout = Buffered , Size = 20
hatte ich auch schon drin. Keine Änderung.
Muss an den Fusebits (meine Freunde :-( ) noch was umgestellt werden um
den UART Freizuschalten oder habt ihr noch ideen wo der Hasse im Pfeffer
sein soll.
Im Anhang hab ich mal nochmal meinen Schaltplan rein. Das ganze soll
dann über einen Step-Up/-Down Regler mit meinem Bluetoothmodul arbeiten.
Momentan ist das Ding noch nicht drin, sondern ein MAX3232 dran der 100%
Richtig beschalten ist, da ich mein BT-Modul schon umprogrammieren
konnte.
Wenn einer von den Bascomspezialisten mal kurz über den Code kucken
könnte wäre Klasse, denn dann weis ich das schon mal daran nicht liegen
kann.
MfG und noch schönen Feiertag aus der mittlerweilen nicht mehr sonnigen
Oberpfalz
Matthias
Hau mal die Zeile:
Open "comd.1:2400,8,n,1" For Output As #1
und den hier: Print #1 , "HALLO" auch komplett raus.
Stattdessen :Print "Hallo"
Die brauchst Du nur, wenn Du einen Software UART benutzt.
Wenn der MAX232 an der "richtigen" seriellen Schnittstelle sitzt, wird
automatisch Com1 geöffnet.
MfG Paul
Welche Aussage davon? Die mit dem Quarz?
Gut: Die Formel dafür ist:
UBRR=(Quarzfrequenz/(16*Baudrate)-1
Das ergäbe dann 383 für UBRR. Das passt aber nicht in das Register rein.
MfG Paul
Paul Baumann wrote:
> Welche Aussage davon? Die mit dem Quarz?>> Gut: Die Formel dafür ist:>> UBRR=(Quarzfrequenz/(16*Baudrate)-1>> Das ergäbe dann 383 für UBRR. Das passt aber nicht in das Register rein.>
Seit wann ist das UBRR für einen Mega16 nur 8 Bit breit?
Hallo Paul,
das ohne extra Anweisung unter Bascom immer der Com1 verwendet wird ist
richtig, jedoch bezieht sich das nicht nur auf Softwareerstelle
Com-Ports. Der Mega2560 hat z.B. 4 * RS232 in Hardware und man muß jeden
Port egal ober er in Soft oder Hardware realisiert wird mittels des
Com-Befehls initialisieren. Ausnahme ist hier auch wieder Port1, das
macht der Compiler selbst, voraussetzung es ist ein Hardware USART. :D
Roland
So ich denke ich habe den Fehler im Code gefunden.
Open "comd.1:2400,8,n,1" For Output As #1 <-- Falsch, absolut nur für
Software-UART!
mit comd.1 sagst du dem Compiler daß du einen Software-Uart haben willst
der am Port D.1 hängt, das ist dann der Ausgangspin.
Schau mal in den Bascom-Samples im Ordner unter "Chips" m2560.bas
Da ist beschrieben wie du den Hardware-Uart öffnest, aber
sicherheitshalber hier noch das ganze in Kürze.
UART konfigurieren:
Config Com1 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 ,
Databits = 8 , Clockpol = 0
Dann die Schnittstelle Öffnen:
Open "COM1:" For Binary As #1
und jetzt kannst du anfangen Daten hin und her zu schubsen.
Da der Compiler das aber beim 1. Hardware-Uart selbst macht und du ihm
schon mit dem $baud-Statement die Geschwindigkeit mitgeteilt hast kannst
du dir das sparen. Das ganze brauchst du nur wenn du entweder einen
Software-Uart machst oder in Hard oder Software einen anderen Comport
als den 1. verwendest.
MfG
Roland :D
Servus Leute,
nach dem Code von Roland gehts einwandfrei.
Die Datei m2560.bas ist net mit dabei.
Also zusammenfassend kann man sagen:
Open "comd.1:2400,8,n,1" For Output As #1
ist für Software UART auf irgend einen Pin
Und:
Config Com1 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 ,
Databits = 8 , Clockpol = 0
ist für den Hardware UART.
Alles klar.
Danke euch Leute. Langsam frag ich mich wie die 8051 damals liefen, denn
viel Quellcode klau ich aus den damaligen Projekt und bastl mirs aus der
Hilfe zusammen.
Naja aller Anfang ist schwer. Ich sehs schon.
Wenn der Mist vll irgendwann mal fertig ist, kann ich ja mal den
Schaltplan und den Quellcode ins Forum stellen für andere Anfänger.
MfG
Matthias
Hallo Matthias,
ja der uC wartet wenn du den Waitkey-Befehl benutzt auf ein Zeichen das
über die Serielle reingerauscht kommt.
Hast du die Originalversion von Bascom direkt von MCSelec oder von einem
Händler ohne Updateberechtigung? Wenn du ein Update machst wird die
fehlende Datei vom Updater erstellt die ist dann sicherlich dabei.
In Software müßtest du noch einen Input-Pin definieren, aber wirklich
nur wenn du nen Software-UART nimmst.
MfG
Roland
Alles klar Roland.
Bascom...lass mich überlegen...war von nem Händler ausm Konkursverkauf.
Ob da ne Updateberechtigung dabei ist...muss mal in den Unterlagen
kramen.
Dank dir.
MfG
Matthias
Hallo Matthias,
mach doch mal folgendes.
Geh in den Programmordner von Bascom und suche dort die Daten
"UpdateWiz.exe"
die startest du mal per doppelklick, der rest erklärt sich von selbst.
Wenn das Update klappt (Geduldig sein daß kann je nach Datenmenge schon
mal 15min dauern bis alles installiert ist) ist alles klar. Wenn nicht,
Mail mir mal ich kann dir dann die aktualisierten dateien (aber ohne
Lizenzfile) schicken. Das ist laut MCSelec kein lizenzbruch, nur meine
Lizenzdatei schick ich natürlich nicht mit, du hast ja eines sonst würde
Bascom nicht laufen. :)
MfG
Roland
Am einfachsten wäre es wie schon geschrieben den open-Kram komplett
rauszunehmen. Eine Baud oder $BAUD-Anweisung im Header und dann nur noch
Print ohne alles, das ist beim Hardware-UART das einfachste.
Aber ich hätte noch eine kleine Frage zu deiner Schaltung. So wie ich
deinen Schaltplan verstehe erzeugst du einen Reset durch Kurzschluss
:-). Da fehlt irgendwie der Kollektorwiderstand. Und im allgemeinen
kannst du die Resetlogik einfacher machen indem du den Resetpin z.B. mit
einen 100nF C gegen Masse und einen 47k Widerstand gegen 5V legst. Das
spart Bauteile und Kosten.
Das gleiche gilt für die Ankopplung deines BT-Moduls. Da kannst du TXD
des Moduls direkt auf den Atmel legen, der Atmel erkennt die Pegel. Und
der RXD des Moduls kannst du über Widerstände oder Zenerdiode
realisieren. Schau mal hier im Forum nach dem Anschluss von
SD/MMC-Karten. Das ist das beschrieben. Das vereinfacht die Sache noch
mehr.
Und um den UART für andere Sachen freizuhaben kannst du den SPI-Bus
nutzen, Der ist auch deutlich schneller.
mfg.
Joachim
@ Joachim R.,
du hast recht, der Reset wird durch nen "harten" Kurzschluß erzeugt. Je
nach Leistung die die Stromquelle bringt macht das der Transistor nicht
wirklich lange und dann gibts Rauch. :)
Ich würde allerdings als Pull-Up an den Reset nicht wie du schriebst 47K
nehmen sondern lieber 10K. Die meisten Progger haben damit keine
Probleme beim "runterziehen" des Reset-Pins, es macht aber die Schaltung
um einiges Stabiler... :)
Mit der Anbindung des BT-Moduls mittels Spannungsteiler als
"Levelshifter" ist etwas vorsicht geboten, je nach auslegung der
Widerstände und somit fließendem Strom kann es sein daß du den Pegel des
BT-Moduls "hochziehst". Ein Linearregler kann spannung nur sourcen und
nicht sinken, das kann das Modul je nachdem wie empfindlich die Eingänge
mit den Dioden nach VCC sind unter Umständen zerstören. (Kann, muß aber
nicht!)
Weiterhin wird durch die Widerstand-Geschichte die Datenrate nach oben
hin begrenzt (ok sollte bei dieser Schaltung nicht so das Problem sein).
Wenn es sauber sein soll, nimm nen Levelshifter, wenn ich mich recht
erinnere kann man gut ein Gatter der LVX-Serie dafür mißbrauchen. :)
Schau mal in der Artikelsammlung da steht was drin, sonst such ich dir
das raus. Ich hatte schon mal ein ähnliches Problem, einen Mega32 mit
einem riesen Dataflash das 3,3V braucht verbinden, eventuell kann ich
dir den Schaltplan raussuchen dort ist das genauer beschrieben. :D
Roland
Servus,
das mit dem Reset hab ich schon gesehen...ist aber ein 10k drin. Also
raucht nix. Das mit dem Step Regler funktioniert bis 115kbaud
einwandfrei. Und ich wollt sicher gehen das eben nix raucht, vorallem
dem BT- Modul trau ich nicht so ganz da nichts im Datenblatt steht
wieviel er verträgt.
HardwareUart läuft etz wie geschmiert, dafür hab ich noch Probleme mit
den Digitalen IO Pins...da ist wo der Wurm drin.
MfG
Matthias