Hallo zusammen,
ich habe einen Tiny85 mit der Library von mchr3k/arduino-libs-manchester
geflasht, um Daten an einen Raspberry Pi Model 1B zu senden. Die GPIOs
des Raspberry Pi werden über die Schnittstelle pigpio angesprochen.
Daher hatte ich gehofft, dass die Manchester-Implementierung unter
pigpio examples – Kapitel „pigpiod_if2 code“
die Daten lesen kann. Leider war dies nicht der Fall, weshalb ich in
Ermangelung einer passenden Library versucht habe, die Arduino-Lib auf
der Empfängerseite selbst zu programmieren.
Soweit ich es verstanden habe, sendet die Library in ihrem Beispiel ein
8-Bit-Paket. Der Tiny85 läuft auf 8 MHz, und ich habe die Baudrate auf
MAN_1200 eingestellt. Vor dem Senden der Nutzdaten wird ein Sync-Muster
[0,0,0,1] geschickt, das in Manchester-Codierung als
[(1,0),(1,0),(1,0),(0,1)] dargestellt wird. Wenn ich es richtig
beobachtet habe, beträgt der Takt, den der Tiny sendet, stets 750 µs,
auf den die Manchester-Codierung aufgesetzt ist.
Mein Problem ist nun, dass ich zwar die Flankenerkennung am GPIO bekomme
– und das sind sehr wahrscheinlich meine Daten – ich diese jedoch nicht
korrekt zusammenbauen kann. Wenn ich jedoch einen anderen Raspberry Pi
mit einem Sender ausstatte und das Pigpio-Beispiel verwende, werden die
Daten problemlos übertragen.
Anbei die Flanken mit den Zeiten
1
2
Tick: 4193214804, Level: 0, Δt: 894 µs
3
Tick: 4193217125, Level: 0, Δt: 1655 µs
4
Tick: 4193218575, Level: 1, Δt: 1450 µs
5
Tick: 4193219450, Level: 0, Δt: 875 µs
6
Tick: 4193221765, Level: 0, Δt: 1645 µs
7
Tick: 4193223350, Level: 0, Δt: 890 µs
8
Tick: 4193224789, Level: 1, Δt: 1439 µs
9
Tick: 4193225645, Level: 0, Δt: 856 µs
10
Tick: 4193227965, Level: 0, Δt: 1630 µs
11
Tick: 4193228670, Level: 1, Δt: 705 µs
12
Tick: 4193229530, Level: 0, Δt: 860 µs
13
Tick: 4193231075, Level: 0, Δt: 855 µs
14
Tick: 4193232554, Level: 1, Δt: 1479 µs
15
Tick: 4193233390, Level: 0, Δt: 836 µs
16
Tick: 4193234100, Level: 1, Δt: 710 µs
17
Tick: 4193234960, Level: 0, Δt: 860 µs
18
Tick: 4193236505, Level: 0, Δt: 854 µs
19
Tick: 4193237205, Level: 1, Δt: 700 µs
20
Tick: 4193238054, Level: 0, Δt: 849 µs
21
Tick: 4193238760, Level: 1, Δt: 706 µs
22
Tick: 4193239600, Level: 0, Δt: 840 µs
23
Tick: 4193240310, Level: 1, Δt: 710 µs
24
Tick: 4193241925, Level: 0, Δt: 1615 µs
25
Tick: 4193242645, Level: 1, Δt: 720 µs
26
Tick: 4193243475, Level: 0, Δt: 830 µs
27
Tick: 4193244970, Level: 1, Δt: 1495 µs
28
Tick: 4193245805, Level: 0, Δt: 835 µs
29
Tick: 4193246520, Level: 1, Δt: 715 µs
30
Tick: 4193247350, Level: 0, Δt: 830 µs
31
Tick: 4193248075, Level: 1, Δt: 725 µs
32
Tick: 4193248905, Level: 0, Δt: 830 µs
33
Tick: 4193249625, Level: 1, Δt: 720 µs
34
Tick: 4193250465, Level: 0, Δt: 840 µs
35
Tick: 4193251180, Level: 1, Δt: 715 µs
36
Tick: 4193252790, Level: 0, Δt: 1610 µs
37
Tick: 4193254290, Level: 1, Δt: 1500 µs
38
Tick: 4193255105, Level: 0, Δt: 815 µs
39
Tick: 4193255840, Level: 1, Δt: 735 µs
40
Tick: 4193256660, Level: 0, Δt: 820 µs
41
Tick: 4193257395, Level: 1, Δt: 735 µs
42
Tick: 4193258210, Level: 0, Δt: 815 µs
43
Tick: 4193258945, Level: 1, Δt: 735 µs
44
Tick: 4193259770, Level: 0, Δt: 825 µs
45
Tick: 4193260500, Level: 1, Δt: 730 µs
46
Tick: 4193261320, Level: 0, Δt: 820 µs
47
Tick: 4193262051, Level: 1, Δt: 731 µs
48
Tick: 4193262870, Level: 0, Δt: 819 µs
49
Tick: 4193263605, Level: 1, Δt: 735 µs
50
Tick: 4193264425, Level: 0, Δt: 820 µs
51
Tick: 4193265155, Level: 1, Δt: 730 µs
52
Tick: 4193265980, Level: 0, Δt: 825 µs
53
Tick: 4193266710, Level: 1, Δt: 730 µs
54
Tick: 4193267530, Level: 0, Δt: 820 µs
55
Tick: 4193268260, Level: 1, Δt: 730 µs
56
Tick: 4193269075, Level: 0, Δt: 815 µs
57
Tick: 4193269810, Level: 1, Δt: 735 µs
58
Tick: 4193270625, Level: 0, Δt: 815 µs
59
Tick: 4193271370, Level: 1, Δt: 745 µs
60
Tick: 4193272185, Level: 0, Δt: 815 µs
61
Tick: 4193272920, Level: 1, Δt: 735 µs
62
Tick: 4193273731, Level: 0, Δt: 811 µs
63
Tick: 4193274470, Level: 1, Δt: 739 µs
64
Tick: 4193275285, Level: 0, Δt: 815 µs
65
Tick: 4193276020, Level: 1, Δt: 735 µs
66
Tick: 4193277610, Level: 0, Δt: 1590 µs
67
Tick: 4193278355, Level: 1, Δt: 745 µs
68
Tick: 4193279170, Level: 0, Δt: 815 µs
69
Tick: 4193280685, Level: 1, Δt: 1515 µs
70
Tick: 4193281495, Level: 0, Δt: 810 µs
71
Tick: 4193282240, Level: 1, Δt: 745 µs
72
Tick: 4193283040, Level: 0, Δt: 800 µs
73
Tick: 4193283790, Level: 1, Δt: 750 µs
74
Tick: 4193284595, Level: 0, Δt: 805 µs
75
Tick: 4193285350, Level: 1, Δt: 755 µs
76
Tick: 4193286145, Level: 0, Δt: 795 µs
77
Tick: 4193286895, Level: 1, Δt: 750 µs
78
Tick: 4193287695, Level: 0, Δt: 800 µs
79
Tick: 4193288452, Level: 1, Δt: 757 µs
80
Tick: 4193289255, Level: 0, Δt: 803 µs
81
Tick: 4193290000, Level: 1, Δt: 745 µs
82
Tick: 4193291575, Level: 0, Δt: 1575 µs
83
Tick: 4193293100, Level: 1, Δt: 1525 µs
84
Tick: 4193293910, Level: 0, Δt: 810 µs
85
Tick: 4193294655, Level: 1, Δt: 745 µs
86
Tick: 4193295460, Level: 0, Δt: 805 µs
87
Tick: 4193296215, Level: 1, Δt: 755 µs
88
Tick: 4193297005, Level: 0, Δt: 790 µs
89
Tick: 4193297765, Level: 1, Δt: 760 µs
90
Tick: 4193298555, Level: 0, Δt: 790 µs
91
Tick: 4193299315, Level: 1, Δt: 760 µs
92
Tick: 4193300110, Level: 0, Δt: 795 µs
93
Tick: 4193300865, Level: 1, Δt: 755 µs
94
Tick: 4193302435, Level: 0, Δt: 1570 µs
95
Tick: 4193303200, Level: 1, Δt: 765 µs
96
Tick: 4193303990, Level: 0, Δt: 790 µs
97
Tick: 4193304745, Level: 1, Δt: 755 µs
98
Tick: 4193305535, Level: 0, Δt: 790 µs
1
import pigpio
2
3
pi = pigpio.pi()
4
PIN = 17
5
6
last_tick = None # Zeitpunkt der letzten Flanke
7
flanken_liste = [] # hier speichern wir die Flanken >700 µs
8
9
def callback_func(gpio, level, tick):
10
global last_tick, flanken_liste
11
12
if level in (0, 1): # nur echte Flanken
13
if last_tick is not None:
14
delta = pigpio.tickDiff(last_tick, tick) # Zeitdifferenz in µs
15
16
if delta >= 700: # nur Flanken über 700 µs speichern
Falsches Forum.
Forum: Projekte & Code
Hier könnt ihr Projekte, Schaltungen oder Codeschnipsel vorstellen.
Projekte bitte nur mit Code oder Schaltplan posten (falls ihr nur Fotos
vorstellen möchtet, bitte in "Zeigt her eure Kunstwerke"). Bitte hier
keine Fragen posten.
Ich verschiebe das mal...
Manchester kann man schon mit den nur 35 Befehlen der Base-PICs
sehr einfach dekodieren. Oder mit einem Z80 mit einem 1 MHz Takt.
Versuchs noch einmal etwas hardwarenäher.
Dabei lernst du dann auch, wie man auf die GPIOs z.B. in C zugreifen
kann. Für die reine Dekodierung würde ich aber immer noch ARM-Assembler
vorziehen. Beachte dabei auch, dass die graue Eminenz in einem Pi,
der Videocore, den ARM zu ihrer eigenen Disposition arbeiten lässt.
Das äussert sich dann in gewissen Aufmerksamkeitsdefiziten wenn dein
Code läuft. Ob das dann noch für dich brauchbar ist, musst du selbst
herausfinden. Bei mir ist an der Stelle der Pi vom Tisch in die Ecke
geflogen...
Lars L. schrieb:> ich habe die Baudrate auf MAN_1200 eingestellt. {...}> Wenn ich es richtig> beobachtet habe, beträgt der Takt, den der Tiny sendet, stets 750 µs,
Eher 833 µs (1/1200 Hz).
Cartman E. schrieb:> Manchester kann man schon mit den nur 35 Befehlen der Base-PICs> sehr einfach dekodieren. Oder mit einem Z80 mit einem 1 MHz Takt.>> Versuchs noch einmal etwas hardwarenäher.> Dabei lernst du dann auch, wie man auf die GPIOs z.B. in C zugreifen> kann. Für die reine Dekodierung würde ich aber immer noch ARM-Assembler> vorziehen. Beachte dabei auch, dass die graue Eminenz in einem Pi,> der Videocore, den ARM zu ihrer eigenen Disposition arbeiten lässt.> Das äussert sich dann in gewissen Aufmerksamkeitsdefiziten wenn dein> Code läuft. Ob das dann noch für dich brauchbar ist, musst du selbst> herausfinden. Bei mir ist an der Stelle der Pi vom Tisch in die Ecke> geflogen...
Hallo,
glaube es war mein Fehler, wollte das ganze eigentlich mit für ein
Projekt verwenden und nicht noch ein extra IC dazwischen hängen. Die
Interrupt Dekodierung sieht Interessant aus, wenn alles fertig ist zu
Übungszwecken versuche ich es einmal.
Dieses ständige ändern der Zeiten der Daten hat mich auch ein wenig
stutzig gemacht. Ich habe nun kein Gefühl dafür ob das diese Zeiten noch
tolerierbar sind oder dies schon der Fehler ist. Wie gesagt von Raspi zu
Raspi über C++ funktioniert es wunderbar und vermutlich funktioniert es
auch blind von IC zu IC.
Lars L. schrieb:> Dieses ständige ändern der Zeiten der Daten hat mich auch ein wenig> stutzig gemacht.
Du brauchst eine bimodale Verteilung, bei der die Häufigkeit in der
Mitte zwischen den beiden Maxima wirklich auf 0 geht. Solange das
erfüllt ist, ist alles gut.
Rainer W. schrieb:> Lars L. schrieb:>> Dieses ständige ändern der Zeiten der Daten hat mich auch ein wenig>> stutzig gemacht.>> Du brauchst eine bimodale Verteilung, bei der die Häufigkeit in der> Mitte zwischen den beiden Maxima wirklich auf 0 geht. Solange das> erfüllt ist, ist alles gut.
Hallo Rainer,
ich hatte zwar Jahren Statistik gehabt, aber der Begriff hat mir nichts
gesagt :D
Also ja, zwischen den Maxima geht es auf null, der Mittelwert liegt bei
783µs und die Standardabweichung liegt bei 50µs.
Mal so eine sidequest Frage, was ist der Hintergrund dieses Phänomens?
Meine Erwartung wären eher das bei der Abbildung der Häufigkeiten der
Zeiten eine Art Glockenkurve entsteht und nicht umgekehrt. Ich habe die
höheren Werte die über 1000µs liegen rausgenommen und nur in dem Bereich
zwischen 700 und 900 genommen. Oder habe ich da etwas komplett Falsch
verstanden :D
Lars L. schrieb:> Meine Erwartung wären eher das bei der Abbildung der Häufigkeiten der> Zeiten eine Art Glockenkurve entsteht und nicht umgekehrt.
Was meinst du mit "umgekehrt"?
> Also ja, zwischen den Maxima geht es auf null, der Mittelwert liegt bei> 783µs und die Standardabweichung liegt bei 50µs.
Die 783µs ist der Mittelwert des einen Maximums und entspricht dem
Abstand zwischen zwei Clockflanken. Der Mittelwert des zweiten Maximums
muss etwa bei dem doppelten Wert liegen und der Symboldauer im
Datenstrom entsprechen. Dein Mittelwert entspricht einer Datenrate von
640 Bd.
Die langen Zeiten zwischen den Flanken entstehen, wenn im Datenstrom
unterschiedliche Bits aufeinander folgen, die kurzen, wenn gleiche Bits
aufeinander folgen.
https://de.wikipedia.org/wiki/Manchester-Code
Bei einer Datenrate von 1200 Bd müssten im Manchestercode Pulse/Pausen
mit 417 µs und 833 µs, entsprechen der halben und der ganzen Symbolzeit,
auftreten.