PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Max232n + M16 Merkwürdige ausgabe



maselx
16.10.2005, 10:38
Hallo,
ich hab da mal so ein Anfängerproblem,
Ich hab mir gestern überlegt, da ich inzwischen das 3. 27*4 LCD von Polin kaputt gemacht bzw. Bescheidenen Erfolg hatte(weis nicht warum), hab ich es also gestern mal mit Serial probiert. Ich hab einen Max232n von Pollin entsprechend angeschlossen, nur kommt eine merkwürdige Ausgabe am PC. Vieleicht weis einer von euch woran das liegt.
Die Baudraten kann ich von 1200 bis 9600 beliebig beim Prozessor und Gleichzeitig im Terminal um stellen es kommt immer die gleiche anzeige.



$regfile = "m16def.dat"
$crystal = 800000

'-------------------------------------------------------------------
' RC5.BAS
' (c) 1999-2003 MCS Electronics
' based on Atmel AVR410 application note
'-------------------------------------------------------------------

Config Pina.2 = Output 'Strom für IR Empfänger
Porta.2 = 1
Config Pina.3 = Output ' Gnd für IR + LED
Porta.3 = 0
Config Pina.4 = Output 'Strom für Status LED
Porta.4 = 1


'use byte library for smaller code
$lib "mcsbyte.lbx"

'This example shows how to decode RC5 remote control signals
'with a SFH506-35 IR receiver.

'Connect to input to PIND.2 for this example
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 settings are restored however so only the interrupt can not
'be used anymore for other tasks


'tell the compiler which pin we want to use for the receiver input


Config Rc5 = Pina.0

'the interrupt routine is inserted automatic but we need to make it occur
'so enable the interrupts
Enable Interrupts

'reserve space for variables
Dim Address As Byte , Command As Byte
Print "Waiting for RC5..."

Do
'now check if a key on the remote is pressed
'Note that at startup all pins are set for INPUT
'so we dont set the direction here
'If the pins is used for other input just unremark the next line
'Config Pind.2 = Input
Getrc5(address , Command)

'we check for the TV address and that is 0
If Address = 0 Then
'clear the toggle bit
'the toggle bit toggles on each new received command
'toggle bit is bit 7. Extended RC5 bit is in bit 6
Command = Command And &B01111111
Print Address ; " " ; Command
Print "Waiting for RC5..."
End If
Loop
End

Die ausgabe wenn ich nun auf z.B. die 5 der Fernbedienung drücke ist:

öû«•ëQ=-ÿiú›
Úü[y•£££åÿöû«•ëQ=--#1¿3!y•£££åë


Also was mach ich da nun noch falsch.

MfG[/img]

PicNick
16.10.2005, 10:45
Nun, ich seh in dem Programm keine Baudraten-Angabe ?

($BAUD=nnnn)

Marco78
16.10.2005, 10:47
Also was mach ich da nun noch falsch.
Den falschen Code benutzen?
Ich sehe im Code nichts, was einen MAX232 benötigt.
Außerdem hast du "nur" einen 800kHz Quarz angeschlossen. Damit kann es nur zu Fehlern kommen, wenn du in wirklichkeit 8MHz meintest.

PicNick
16.10.2005, 10:50
Ich sehe im Code nichts, was einen MAX232 benötigt.


print ?

maselx
16.10.2005, 10:54
Das mit dem Quartz ist mir noch garnicht aufgefallen :-)
die Baudrate stelle ich im Bascom ein, aber ich hab jetzt mal im Code mit aufgenommen, aber trotsdem ist die Anzeige imer noch wirwar.
doch doch Print ist mit drinnen da soll jedesmal senden wenn ich auf der Fernbedinung etwas Drücke. Ist ein Sample von Bascom zum verstehen lernen.

$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600

Marco78
16.10.2005, 11:25
Sorry, das Print habe ich überlesen bei den ganzen Kommentaren.

Im Terminal ist die gleiche Baudrate eingestellt? Das Anschlusskabel ist 100%ig richtig? Der MAX232 ist 100%ig richtig angeschlossen?

Im Code ist sonst kein Fehler zu sehen. Das Baud in den Settings eingestellt ist, ist Ok. Sobald ein Print o.ä. kommt, wird die Einstellung übernommen.

16.10.2005, 12:05
Ich weis garnicht was mann da so noch falsch machen kann, die Schaltung hab ich schon xmal geprüft.
Eigentlich wird ja auch so alles gemacht was er soll er wartet braf bis ich was auf der FB drücke und schickt alles zum Pc, nur die Zeichen sind nicht lesbar, das heist für mich eigentlich das ich das richtig verdratet hab, sonst würde doch garnix zucken oder ?
Kann ich da irgenwas mit einem Multimeter messen um die Funktion zu überprüfen ?

maselx
16.10.2005, 12:17
ich war wohl nicht eingeloggt ...

das Kabel ist eins mit 2 weiblichen steckern wo ich den stecker auf das board stecken kann ich hab da stiftleisten zurechtgebogen damit es passt.
Ich hab mich an dieser http://www.mikrocontroller.net/tutorial/uart Schaltung orientiert nur die Dräte wegen des kabels Spiegel verkehrt angeschlossen damit ich die selbe funktion hab und den MAX323N entsprechend dem Datenpbatt angeschlossen. Ist doch so richtig oder den sonst würde ja nix am PC ankommen.

PicNick
16.10.2005, 13:03
Wenn $crystal und $baud stimmen und auch die Fuses für externen Quarz eingestellt sind (und der Quarz auch stimmt), sind die BasCom "Print"-Funktionen Büffel, die immer funktionieren.
Back to the roots: Schreib ein Programm, das einmal in der Sekunde "Hello" schreibt.
DO
PRINT "HELLO"
Waitms 1000
LOOP
Egal, was du am Terminal siehst, du kannst abschätzen, ob die Sekunde auch stimmt.
Wenn du NUR am AVR die Baudrate änderst, sollten sich die Zeichen auch irgendwie verändern. Tun sie das nicht, iswas mit der Hardware am MAX (Pegel verkehrt oder sonstwas)

Sind die Zeichen, die du siehst, Sonderzeichen > 127, nimmt er dein Stop-Bit als Datenbit, ---> d.h. Der AVR ist zu schnell.

Noch was: HELLO + LF + CR sind sieben Zeichen. Wieviele Zeichen siehst du am Schirm (für ein "Hello") ?

Mehr Zeichen am Schirm ---> AVR zu langsam
Weniger---> AVR zu schnell

maselx
16.10.2005, 13:58
für ein Hello kommen 6 zeichen wenn ich im terminal die Baudrate kleiner als des MC kommen drei zeichen wenn ich höher mache als MC kommen tatsächlich mehr zeichen raus.

oder meinst du ich soll an dem MC eine kleinere Frequenz einstellen ? Ich benute noch derzeit den Internen Quartz, oder ist genau das mein problem?

PicNick
16.10.2005, 14:05
Schau dir nochmals die Configuration für den Internen Quartz an.
auf jeden Fall muß dann die "$CRYSTAL" -Angabe stimmen, sonst hast du keine Chance.

maselx
16.10.2005, 14:24
kann es sein das im terminal einfalscher zeichensatz angezeigt wird ?

Ich hab den internen Quartz mal mit 4MHz eingestellt und es kommen genau die selben zeichen als wie mit 8MHz.
Außerdem hab ich mal die alles beim Max232N auf die 2weiten Anschlüsse gelegt also MC - T2IN zu T2Out - Serial und MC R2Out zu R2In Serial und hab leider immer noch das selbe ergebniss.
Beim Serial stecker kann doch nur GND und die Pins 2und3 also da kann ich nichts falsch machen.

Ach ja das Hallo bzw. die Zeichen kommen im sec takt.

PicNick
16.10.2005, 15:42
kann es sein das im terminal einfalscher zeichensatz angezeigt wird ?
Nein. wenn eingestellt ist: baudrate, 8 Bit, noparity, 1 Stop, gibt's da keine querschläger.
Du kannst ja einmal das Terminalprogramm beenden und wieder starten, das wird's aber nicht sein.


Ach ja das Hallo bzw. die Zeichen kommen im sec takt.
Also ungefähr stimmt's ja, scheinbar.
Ich schätze mal, daß der interne Quartz durch seine Ungenauigkeit einfach zu weit weg ist von der Soll-Frequenz.

Hast du keine Möglichkeit, einen externen Quartz anzuschließen ?

maselx
16.10.2005, 17:04
ich binn grad etwas unsicher, ich hab grad aus einem sat reciver ein 4MHz quarz mit zwei passenden kondensatoren ausgelötet und hab sie in meine schaltung mit eingabaut.
Als ich allerdings die Fusebit auf extern Clock gestellt hab ist nix mehr aus dem MC raus zu bekommen bzw. zu rück zu stellen.
Ich hab mir schaltungen angesehen und eigentlich ist da auch nix falsch zu machen, aber irgendwie ist heut nicht ein tag.

wtal1 und xtal2 an zweibeinigen quarz 4Mhz daran jeweils ein kondensator mit 18pf an gnd

da ich jetzt im moment nur noch einen funktionierenden mega16 hier hab will ich es erstmal mit internen Quarz belassen oder rauskriegen warum der externe nun nicht wolte.

PicNick
16.10.2005, 17:24
Da ist wirklich nix falsch zu machen, aber die Schweinebacke schwingt offenbar nicht. Wenn du keinen anderen Quarz in der Nähe hast, dann laß' es lieber.
Interner Q: Da ist doch irgendwas mit kalibrieren oder so ? Nie darum gekümmert, ich hab keinen Schimmer von nix.

Du kannst testweise beim "$BAUD" auch mal 9500 oder sowas angeben, vielleicht funzt es dann

maselx
16.10.2005, 18:16
werd ich heut abend mal rumprobieren, ich danke erstmal für die Hilfe bisher. wird schon irgendwie.
Mir fällt grad ein ich hab noch ein mega128 auf nem Board wo schon ein fertiger quartz drauf ist mit dem werd ich erstmal den Max testen. Ich nehm den nurnicht so gern da der doch im vergleich sehr teuer ist.

ShadowPhoenix
16.10.2005, 18:28
Wenn du im Code schreibst:

PRINT x; Chr(13);

Werden deine Daten "x" und ein erforderliches <CR> gesendet. Somit sollte das Terminal alles richtig anzeigen, da ja eigentlich immer ein <CR> erwartet wird.

War auch mein Fehler in meinem Programm, hatte mich lang damit rumgeschlagen :D

MfG,
ShadowPhoenix

EDIT:
Probiers mal mit dem Code:


$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600

Do
Print "Test"; Chr(13);
Waitms 1000
Loop


(Ich übernehme keine Verantwortung für eventuell auftretende dauerhafte Schäden oder Ähnliches \:D/ )

PicNick
16.10.2005, 18:50
@Shadow: Der Bascom "Print" schickt eigentlich freiwillig ein <CR> und ein <LF> hinten nach, ausser, du mach am Schluss ein Semikolon
PRINT "Hello" ====> PRINT "Hello";chr(13);chr(10);
PRINT "Hello"; ====> PRINT "Hello"
Dein (gehabtes) Problem klingt seltsam

maselx
16.10.2005, 21:16
Also den ;chr(13) hinterm Print das kommt glaub ich schon mal gut da jetzt schon mal nicht Sonderzeichen kommen aber eigentlich immer noch etwas unsin für das "Test" komt ein "UStT" naja vieleich muss da noch ein Übersetzungsprogramm her :-D

So ich hab jetzt mal den Mega128 mit an den selben 5V und GND geschlossen, dann hab ich vom M16 die TXD und RXD an die vom M128 glötet. Da der M128 den gleichen pin für den ISP (Miso=TXD) benutzt konnte ich mal beim Programmieren mitschneiden und das kam dabei herraus:

} @@?@}}___@~~}^]~|~z|v>_\q_~|\>?A>~}}|?<}z8|UStTp||~p<xxx~|x|>:x~p|:@p|p|8|~>|p
~^><>pt|pp~x>~ppx8|8>~pp|~>p:||x88^>~?px8tptp8<~|

ich hab übrigens mal ein anderes Terminal prog probiert aber da kommt die gleiche Ausgabe.

Nun die Ausgabe vom M128 mit externen 16MHz Quarz:
UStT

ist also genau wie vom M16 mit internen Quarz.

Wie kann ich eigentlich zu MC Zeichen senden?
Ich hab irgendwo gelesen das wenn ich den TXD und den RXD hinterm Max232 zusamenlege die Anzeige genau so zum PC zurückkommt.

Bzw kann mann das im Code einbaun das er halt zeichen zurückwirft?

maselx
16.10.2005, 21:47
"TUSt " wird bei "Test" zurück gegeben.
Ich hab jetzt nochmal ein anderes COM Kabel benutzt diesmal mit Weiblichen stecker im PC und ein Männlichen am MC wobei ich nur noch die zwei Pins im Stecker direkt (T2OUT und GND) vorsichtig mit Fädeldrat verbunden hab.
Aber auch immer nur die "TUSt " Antwort.

maselx
18.10.2005, 20:01
So hab nun den Fehler gefunden, der Max232 hat nicht den Pegel in die minus bereiche gezogen (warum auch immer). Hab ihn nun getauscht und jetzt Funktioniert alles Prima.

Ich Danke trotsdem dehr für eure Hilfe.