mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATM128, Bascom und Serroutprobleme


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich habe da ein kleines Problemchen , eigentlich sinds 2, aber das 2te 
lass ich noch für den moment. Ich möchte gerne über SEROUT Daten 
rausschicken und habe dies mit Port E.0 und D.3 versucht, bei beiden das 
gleiche Ergebniss. Im Terminal kam überhaupt nichts raus, ich hänge euch 
mein Code mal an, syntaktisch sollte der eigentlich stimmen, aber wieso 
das nicht funktioniert weiss ich auch nicht. (kompatibilitätsmodus ist 
auch ausgeschaltet)
$regfile = "m128def.dat"
$crystal = 16000000
Baud = 9600

Dim Haha As String * 10
Goto Test1


Test1:

Do
  Haha = "haha"
   Serout Haha , 4 , D , 1 , 9600 , 0 , 8 , 1
Loop

Und das 2te Problem trat eigentlich noch früher auf, als das, welches 
ich  oben beschrieben habe. Es ging eigentlich um genau gleiche mit dem 
kleinen Unterschied, das es anstatt des String's ein Array von 4 
Integern war. Fehlermeldung : Array expected, hmmmm.... hab ich ned 
kapiert.. den ein Array hat er ja bekommen.

Definiert war dies folgendermassen
Dim Sendbyte(4) As Integer 


'Inhalt von Sendbyte wurde folgendermassen gefüllt
    Select Case Cmd
           Case 1                                           'Play
                Sendbyte(1) = 32
                Sendbyte(2) = 01
                Sendbyte(3) = 33
           Case 2                                           'Stop
                Sendbyte(1) = 32
                Sendbyte(2) = 00
                Sendbyte(3) = 32
           Case 3                                           'Rec
                Sendbyte(1) = 32
                Sendbyte(2) = 02
                Sendbyte(3) = 34
           Case 4                                           'Fast forward
                Sendbyte(1) = 32
                Sendbyte(2) = 16
                Sendbyte(3) = 48
           Case 5                                           'Fast backward
               Sendbyte(1) = 32
               Sendbyte(2) = 32
               Sendbyte(3) = 64
           Case 6                                           'Jog forward
                Sendbyte(1) = 32
                Sendbyte(2) = 01
                Sendbyte(3) = Speed
                Sendbyte(4) = 33 + Speed
           Case 7                                           'Jog backward
                Sendbyte(1) = 32
                Sendbyte(2) = 01
                Sendbyte(3) = Speed
                Sendbyte(4) = 33 + Speed

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>habe dies mit Port E.0 und D.3 versucht
Da kommst Du aber nicht raus, sondern auf Port D.1
Der String ist aber nur 4 Zeichen lang und bei Dir ist er auf 10 
dimensioniert. Das "GOTO" brauchst Du da auch nicht, er kommt sowieso 
von allein zu dem Label "Test1"

Versuche mal diese Zeile:

Serout Haha , 0 , E , 0 , 9600 , 0 , 8 , 1

MfG Paul

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter, danke für deine Antwort,

folgendes: die Sache mit der Variabelgrösse habe ich übersehen, die 
Sache mit dem Goto ist gewollt, weil da noch mehrere Übungen hinsollen 
und ich mit diesem goto dann sehr einfach steuern kann wohin das 
programm geht.

Zum Problem:
$regfile = "m128def.dat"
$crystal = 16000000
Baud = 9600

Dim Haha As String * 4
Goto Test1


Test1:

Do
  Haha = "haha"
   Serout Haha , 4 , D , 1 , 9600 , 0 , 8 , 1
Loop
erzueugt überhaupt keine Ausgabe
  Serout Haha , 0 , D , 1 , 9600 , 0 , 8 , 1
  Serout Haha , 0 , E , 0 , 9600 , 0 , 8 , 1
  Serout Haha , 4 , E , 0 , 9600 , 0 , 8 , 1
  Serout Haha , 0 , D , 3 , 9600 , 0 , 8 , 1
  Serout Haha , 4 , D , 3 , 9600 , 0 , 8 , 1
diese codezeilen hier erzeugen ebenfalls keine Ausgabe im Terminal

Ich habe nun wirklich alles ausprobiert und vom Datenblatt des Prozesors 
wären ja eigentlich die Ports E1 und D3 di UART-Transmitt Pins. 
Korriegiert mich bitte wenn ich mit meiner Logik eventuell Unsinn 
anrichte. Aber es kann doch nicht sein dass auf allen ausgabepins nix 
kommt.

Grüsse
Daniel

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du $baud schreibst ists sowieso essig mit
serout auf den uart pins, weil die dann nicht auf
standard I-O sondern auf UART belegt werden.

alternativ kannste mal $baud=9600 und $baud1=9600
setzen und dann per print "haha" und print #1, "duda"
die hardwareuart testen.

dann gibts da noch das problem mit der fuse
m103-compatibility, die sollte deaktiviert sein.

Autor: Ich weis es (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du von Bascom was anderes erwartet als Probleme?
Nimm eine vernünftige Programmiersprache dann klappt's auch.
BASCOM == Probleme;

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ein paar Sätze aus der Bascom Hilfe zu "Serout":
 String variables will wait for a return (ASCII 13). There is no check 
if the variable you assign is big enough to hold the result.


Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 1

'                                      ^ 1 stop bit

'                                  ^---- 8 data bits

'                                ^------ even parity (0=N, 1 = E, 2=O)

'                        ^-------------- baud rate

'                  ^-------------------- pin number

'               ^----------------------- port so PORTA.0 and PORTA.1 are 
used

'           ^--------------------------- for strings pass 0

'      ^-------------------------------- variable


@Ich weiß es

Nein, Du weißt es nicht! Auch eine sog. "vernünftige" Programmiersprache
gibt nichts auf den "richtigen" Portpin aus, wenn der falsche 
angesprochen wird.

Paul

Autor: Ich weis es (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Schotter.
Mir ist schlecht von soviel Bascom.

Autor: dsgfsdfgsdfg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Ich weis es (Gast)

dann halt dich doch aus bascom threads raus ...
was soll denn das unproduktive genöle.
zieh dir dein c doch die nase hoch wenns dich
glücklich macht. ... bei c kommt mir im übrigen
was hoch was ich hier nicht tippen möchte.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul:

Die Serrouthilfe hab ich mir in meine Bascombuch durchgeschaut und mein 
Befehl eigentlich genau auf dem Beispiel von da zusammengeschraubt. Nur 
verstehe ich nicht wieso da auf der Konsole nichts dabei herauskommt. 
Muss ich da etwa in irgend einem Register noch was umschalten?

Der Kompatibilitätsmodus ist schon lange draussen, alle möglichen 
Ausgabebins habe ich versucht... ich weiss ned weiter

Autor: dsgfsdfgsdfg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
haste denn auch die ddr gesetzt?
also config portx.y = output  ?

könnte mit rein spielen

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(ATmega128)

The pins PE1 is the TX pin of the first hardware USART.
The pins PD3 is the TX pin of the second hardware USART.

The Bascom SEROUT command is a software UART. There is no
need to use this command if you are using the pins of the
built-in hardware USART.

Try this code and make sure you are using a TTL>RS232 level
shifter like a MAX232 chip.
$regfile = "m128def.dat"
$crystal = 16000000
$baud = 9600

Do

   Print "Hello!"  ' Will print from the hardware USART0, pin PE1.
   Waitms 1000

Loop

End


To use both hardware USARTs, see the Bascom sample "m128.bas"
located in the folder ...BASCOM-AVR\SAMPLES\CHIPS\.

Note that in ATmega103 compatibility mode, the second USART is
not available. (Disable the M103 compatibility mode via fuse bit).

If you still need a software UART, then see the sample "serin_out.bas"
located in the folder ...BASCOM-AVR\SAMPLES\SERIAL\

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
My Hero Anonymous :),

Since I began with this Story of Serout Serin UART e.c., i wasnt' as 
close as now by the end then now.

Now my Terminal, at least becomes something from the Board, but every 
time the same crappy shit. Instead of Hello, he prints that funny 
symbols as you can see in the attachment. What could that be?

Thanks for your help
Daniel

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
You are using the wrong clock source. The ATmega128
is shipped with the internal RC oscillator at 1 MHz.
(The chip is shipped with the internal RC oscillator enabled).

Verify the fuse bytes.

If the chip is running at 1 MHz, then try this code:
$regfile = "m128def.dat"
$crystal = 1000000
$baud = 2400

Do

   Print "Hello!"  ' Will print from the hardware USART0, pin PE1.
   Waitms 1000

Loop

End

Remember to change the baud rate of the terminal emulator to 2400.
(9600 not possible at 1MHz).

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.