0-bit: 380us
1-bit: 520us
sync-bit: 700us
Med oscilloskop bekräftar jag dessa tider (+/- 20us) för ett originalspel på en originalbandspelare vars tonhuvud inte har justerats (låslacket sitter kvar på skruven).
Jag kopplar upp en PIC16F628A på labbplattan och sätter på en 20MHz kristall. Detta ger processorn en instruktionstid på 4/20M = 200ns, och kristallfrekvensen har bekräftats med oscilloskop.
Datasettens pinne 4 ("READ") kopplas till pinne 9 som är RB3/CCP1, och jag ställer in den pinnen att användas som "Capture mode, every falling edge".
Timer1 körs i "timer mode", vilket innebär att räknaren ökas med 1 för varje klockcykel/instruktion. Detta innebär att antalet ticks för datasettens bittar blir följande:
0-bit: 380us / 200ns = 1900
1-bit: 520us / 200ns = 2600
sync-bit: 700us / 200ns = 3500
För att få lite spelrum med brus och annat så lägger jag till lite marginaler:
0-bit: 1550-2250 ticks
1-bit: 2251-3050 ticks
sync: 3051-3950 ticks
Min enda avsikt här är att mäta tiderna. Jag läser in 40 värden (mer minne har jag inte tillgängligt) i en array, konverterar talen till strängar och skickar ut alla via RS232 till min laptop (där minicom tar emot allt och loggar datat). Därefter börjar loopen om; 40 nya värden mäts, konverteras, skickas. Repetera. Vissa bittar går förlorade under tiden RS232-leveransen sker, men det gör inget eftersom jag som sagt är ute efter pulstiderna.
När all data är överförd har jag en ungefär 12000 rader textfil som ser ut såhär, där siffrorna anger antal ticks:
02200
01847
02289
02179
02269
01152
02261
02625
02223
01817
02284
02173
02273
...
Detta matar jag sen till ett Python-script för att se hur tiderna är utspridda.
Resultatet förväntas bli relativt jämn spridning mellan 0/1/sync och några få lower/higher (utanför mina marginaler), men resultatet ser ut såhär:
Kod: Markera allt
$ ./1531.py 1531_dump.1506334803
{'lower': 113565,
'ones': 94978,
'zeros': 24804,
'sync': 36932,
'higher': 1}
Kod: Markera allt
$ ./1531.py 1531_dump.1506333406
{'lower': 84634,
'ones': 10651,
'zeros': 82658,
'sync': 75088,
'higher': 9}
Hela den körbara källkoden finns här: http://99dbf8a8cf47aef7.paste.se/
Finns det något uppenbart som jag har gjort/tänkt fel här?