PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten senden und empfangen, ich empfange nicht was ich sende



Wasi
25.11.2005, 10:13
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.

Wasi
25.11.2005, 10:22
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!

PicNick
25.11.2005, 10:26
Schaut sehr nach Baudratenfehler aus. (Quarz-fehler ? )

Wasi
25.11.2005, 10:54
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ß.

PicNick
25.11.2005, 11:09
Ich mutmaße, daß du den Mega auf externen Quarz einstellen mußt, mit den "Fuses" --> Datenblatt

Wasi
25.11.2005, 11:29
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?

PicNick
25.11.2005, 11:32
Müssen nicht. Aber wie auch immer du den Mega betreibst, zwischen der tatsächlich eingestellten Taktfrequenz und
$crystal = 4000000
muß Einigkeit herrschen

Wasi
25.11.2005, 12:12
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?

PicNick
25.11.2005, 12:17
mmmhhh.
Sende mal mehrer Rufzeichen ("!" = &H21) und schau, was du am Schirm siehst. (und sag's mir)

Wasi
25.11.2005, 13:00
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

PicNick
25.11.2005, 13:10
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

Wasi
25.11.2005, 13:29
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

PicNick
25.11.2005, 13:36
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

Wasi
25.11.2005, 13:51
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)

Wasi
25.11.2005, 13:58
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.

PicNick
25.11.2005, 14:00
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)

Wasi
25.11.2005, 14:36
Dann bräuchte ich ja einen 3,6864MHz Quarz und alles wäre gegessen, oder?

PicNick
25.11.2005, 14:41
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.

Wasi
25.11.2005, 14:46
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.

PicNick
25.11.2005, 15:00
Ist (auch als Application Note bei Atmel ) unter "calibration" zu finden.
Viel Grlück !

Wasi
25.11.2005, 15:19
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.

PicNick
25.11.2005, 15:22
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 ?

Wasi
25.11.2005, 15:28
Ja, das könnte ich noch machen.

werde es nachher mal Versuchen.

Danke!

Wasi
25.11.2005, 15:32
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 .

Wasi
25.11.2005, 15:46
O.K., so Funktioniert es.

Mit Baudrate 4800 und 1MHz. O:)

PicNick
25.11.2005, 16:05
Tätarätääää ! Kaum macht man's richtig, geht's auch schon