mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Problem oder schon wieder Fusebits?


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

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so: Mit DEM Quarz kommst Du mit der Baudrate nicht hin. Stelle mal 
9600
Baud ein.

MfG Paul

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Paul: Die Aussage solltest du mal begründen!

MfG Spess

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl-Heinz
Stimmt! Es gibt ja UBRR H und UBRR L

....vielleicht sollte man doch mehr in Assembler zu Werke gehen.

Paul
(alter Schussel) ;-)

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Roland
...auch das stimmt, aber er hat doch "nur" einen ATmega16.

Paul
(Kamera-geschädigt)

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag.

Und als Input würds dann auch so laufen oder?
Sprich er müsste jetzt schon mit z.B. Waitkey auf eine Eingabe am RX 
warten oder?

MfG
Matthias

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joachim R. (bastelbaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.