Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten senden und empfangen, ich empfange nicht was ich sende
Hallo,
ich weiß nicht woran es liegt, hatte vorher einen Atmega8515 und da
hat es funktioniert, weiß jetzt aber im nachhinein nicht ob ich noch
was anderes geändert habe.
Verwende jetzt einen Atmega8 auf dem STK500 Board und sende wie im
folgenden Code:
'################################################# #############
'Wird sw0 gedrückt wird übertragen und im VB Programm Werte.exe
'empfangen!
'################################################# #############
$regfile = "m8def.dat" '"8515def.dat"
$baud = 9600
$crystal = 4000000
Ddrb = &B00000010 'LED1 leuchtet wenn SW1 gedrückt wird
Ddrc = &B00000000 'setz Pin 0-7 von Portc zurück
Dim Wert1 As String * 5
Dim Wert2 As String * 5
Dim Wert3 As String * 5
Dim Wert4 As String * 5
Dim Wert5 As String * 5
Dim Wert6 As String * 5
Dim Wert7 As String * 5
Dim Wert8 As String * 5
Dim Wert9 As String * 5
Dim Wert10 As String * 5
Dim Wert11 As String * 5
Dim Wert12 As String * 5
Wert1 = "1"
Wert2 = "2"
Wert3 = "3"
Wert4 = "4"
Wert5 = "5"
Wert6 = "6"
Wert7 = "7"
Wert8 = "8"
Wert9 = "9"
Wert10 = "10"
Wert11 = "11"
Wert12 = "12,01"
Dim Km As String * 4
Dim Dz As String * 3
Km = "km/h"
Dz = "d/1"
Do
If Pinc.1 = 0 Then 'abfrage von Pin 1
Reset Portb.1 'setz Pin 1 zurück
Wait 1
Print Dz
Print Km
Else
Set Portb.1 'setz Pin 1
End If
'If Pinc.0 = 0 Then 'abfrage von Pin 0
'Reset Portb.0 'setz Pin 0 zurück
'Wait 1
'Print Wert1
'Print Wert2
'Print Wert3
'Print Wert4
'Print Wert5
'Print Wert6
'Print Wert7
'Print Wert8
'Print Wert9
'Print Wert10
'Print Wert11
'Print Wert12
'Else
'Set Portb.0 'setz Pin 0
'End If
Loop
End
Und Empfangen tu ich folgendes:
ðøxþxøx
þxà
€x
Hoffe da kann mir jemand weiterhelfen.
Hab noch was Vergessen!
Beim Simulieren in Bascom stimmt die Ausgabe mit "d/1" und "km/h"
Es kann also sein das es auch am Empfangen liegt, wollte aber das senden
auf jedenfall mal ausklammern!
Schaut sehr nach Baudratenfehler aus. (Quarz-fehler ? )
Bin anfänger, wäre schön wenn du mir sagen könntest was und wie ich das
prüfen kann, oder was ich da machen muß.
Ich mutmaße, daß du den Mega auf externen Quarz einstellen mußt, mit den "Fuses" --> Datenblatt
Ich mutmaße, daß du den Mega auf externen Quarz einstellen musst, mit den "Fuses" --> Datenblatt
Das heißt ich muß mir erst einen Quarz besorgen?
Müssen nicht. Aber wie auch immer du den Mega betreibst, zwischen der tatsächlich eingestellten Taktfrequenz und
$crystal = 4000000
muß Einigkeit herrschen
Unter Fuses ist folgendes Häckchen:
Int. RC Osc. 1Mhz; StartupTime: 6CK + 64ms [CKSEL=0001 SUT=10]; Default Value
Wenn ich jetzt "$crystal = 1000000" einstelle sollte es doch gehen?
Der fehler wird mit 7,84% Angezeigt.
Ausgabe:
Äoq
ëío
È
Hab es probiert und es geht nicht.
Hab dann "3686400" eingestellt und "$crystal = 3686400", hat aber auch nichts gebracht.
Der fehler wird mit 0,00% Angezeigt.
Ausgabe:
À8ÿ
8ø8ÿ8
ð
Gibt's noch eine möglichkeit?
mmmhhh.
Sende mal mehrer Rufzeichen ("!" = &H21) und schau, was du am Schirm siehst. (und sag's mir)
Das hab ich mal gemacht:
Km = "!"
Dz = "!"
A = "!"
B = "!"
C = "!"
D = "!"
Print Dz
Print Km
Print A
Print B
Print C
Print D
Ich hoffe das ist das was du meinst.
Ausgabe:
8
À8
ÿ
À8ÿ
À8
Ich war ungenau: schick mal
Km = "!!!!!!!!" ' 8 stück
print Km; ' mit semikolon !
Und testen wir mal Quartz /Taktzfrequenz mit testprogramm
dim zahl as byte
do
print zahl
incr zahl
wait 1
loop
Die zahl wirst du nicht lesen können, aber ob das mit der Sekunde warten einigermassen stimmt, kannst du schätzen und/oder stoppen
Ich war ungenau: schick mal
Km = "!!!!!!!!" ' 8 stück
print Km; ' mit semikolon !
Ausgabe:
8
x
Und testen wir mal Quartz /Taktzfrequenz mit testprogramm
dim zahl as byte
do
print zahl
incr zahl
wait 1
loop
Die zahl wirst du nicht lesen können, aber ob das mit der Sekunde warten einigermassen stimmt, kannst du schätzen und/oder stoppen
Es sind ca. 3sec!
Eingestellt ist:
$crystal = 3686400
3 sekunden ? naja, dann haben die Rufzeichen keine chance (das geht besser bei geringeren Differenzen)
Dann tät ich sagen, er taktet in wirklichkeit mit 1 MHZ.
wie geht's mit $crystal=1000000 ? das hatten wir schon mal, aber probier's nochmal, mit stoppen und Rufzeichen
Gesendet mit:$crystal = 1000000
Km = "!!!!!!!!" ' 8 stück
print Km;
Ausgabe:
AaAAaaaa 'Beim 1 Übertragen! (Taster Drücken)
aaaaAAaA 'Beim 2 Übertragen! (Taster Drücken)
aaaaaaaa 'Beim 3 Übertragen! (Taster Drücken)
aaAaaAAa 'Beim 4 Übertragen! (Taster Drücken)
Aaaaaaaa 'Beim 5 Übertragen! (Taster Drücken)
AaaaaAAa 'Beim 6 Übertragen! (Taster Drücken)
aaAAAAAA 'Beim 7 Übertragen! (Taster Drücken)
aaaaAAaA 'Beim 8 Übertragen! (Taster Drücken)
Ich hab mal wegen dem Empfang Program in einem dementsprechenden
Forum mal nachgefragt und erhielt folgende Antwort was das senden und
empfangen betrifft!
Offensichtlich werden deine Daten (Werte) binär gesendet. D.h. du mußt die Inhalte der Bytes in Zahlenwerte wandeln oder der Sender muß Text schicken.
aaaah ! das ist schon knapper dran
Zur Erläuterung: Beim rufzeichen schickst du weg
startbit.0.1.2.3.4.5.6.7.Stopp
"!"=0...1.0.0.0.0.1.0.0.1.......Erliest aber kleinesgrosses A (&H61 / &H41)
"a".0...1.0.0.0.0.1.1. usw.
d.h. beim 0-er bit gehts noch, aber beim 5/6 ist er knapp daneben.
Da schlagen die % Baudraten Fehler offenbar voll zu.
*murmel* da müßt man den RC Oszillator kalibrieren, oh graus
Hat irgendeiner eine Idee ?
(Anfrage is ok., du solltest beim stopp-prog schreiben "print str(zahl);"
hilf uns da aber nix)
Dann bräuchte ich ja einen 3,6864MHz Quarz und alles wäre gegessen, oder?
Denk' schon. Eigentlich jeder externe Quartz geht ausreichend genau.
der RC ist halt eine Eier-Uhr, und bei 1 MHZ schlafen dir irgendwann ohnehin die Füße ein.
Aber im Prinzip hinbiegen sollt' man auch den internen RC schon können, hab ich halt noch nie gemacht.
Ich hab gelesen das der ATmega8 vom Werk her mit 1Mhz eingestellt ist.
Der aber verändert werden kann, bloß wie, muß ich mal weiter in mein
Buch oder hier schauen.
Ist (auch als Application Note bei Atmel ) unter "calibration" zu finden.
Viel Grlück !
Mit der Baudrate 9600 bleibt mir nichts anderes übrig als einen
Quarz zu besorgen.
Der Atmega8 ist für mich zum Üben, jedoch wenn nur Müll kommt
lernt man auch nicht's ](*,) .
Mal schauen bis wann ich weiter machen kann, Quarz muß erst her.
Danke PicNick für deine Hilfe.
Ich bin mir zwar recht sicher, daß das Problem daran liegt, aber du könntest doch mit niedrigeren Baudraten, wo der Fehler geringer ist und es also gehen müßte, erst mal probieren, ob ich dir da keinen Stiefel erzählt habe ?
Ja, das könnte ich noch machen.
werde es nachher mal Versuchen.
Danke!
Hab mal nach geschaut, mit der Baudrate 4800 und 1MHz hab ich auch keine Fehlerrate.
Ha, weg von Baud 9600 und schon sollte es gehen :-k .
O.K., so Funktioniert es.
Mit Baudrate 4800 und 1MHz. O:)
Tätarätääää ! Kaum macht man's richtig, geht's auch schon
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.