Language: NL or EN
Mode: PC, Tablet, Mobile or TV
pcpret.nl: hiking, photography, audio and computer!
WelcomeSoftwareSend messageGuestbookWebsite BlogLinks RSS button
Bloem van watermuurKijk ook eens op www.natuurspoor.nlPaddestoel

Software Development

I2C op de PC, historie
Basicode historie
Webdesign, allerlei
Video file saving in Wmv
Save audio in Wma
Downloads
Matrox Marvel G200
Digital TV DVB-C/S
Media Center remote control
Analog TV and FM radio
Teletext on a PC
Digital TV DVB-T
DirectX and DirectShow
Amcap video capture
Introduction

Meest gelezen onderwerpen:
Website blog...
Mediastreaming van Windows P...
Pingen en een IP adres vinde...
Gastenboek lezen...
Geluidsapparatuur aansluiten...
UTP, straight en cross ...
Schrijf een bericht...
Windows 7, 8 en 10 in een th...
Gastenboek schrijven...
Een thuisnetwerk aanleggen...

OS=
Browser= Applewebkit 537.36
IP adres= 3.145.93.145
Bezoekers= 1983285     Meer ...
(Vanaf 27-10-2010)

Country information of visitors, 26 oct 2024 till 01 nov 2024

Een stukje historie en
I2C toepassingen (zoals Teletekst) op de PC

  1. Een stukje historie
  2. Het Basicode tijdperk
  3. Teletekst op de computer
  4. I2C, Telenew en de computer
  5. De Philips interface, I2C via de printerpoort
  6. I2C via de printerpoort van de PC
  7. I2C via de seriële interface van de PC
  8. I2C bus koppelingen
  9. Nieuwe ontwikkelingen
  • Een stukje historie

    Tijdens mijn studie maakte ik kennis met de mogelijkheden van de computer. Sinds 1980 bezat ik een programmeerbare rekenmachine (een HP34C). Dit kleine apparaatje bleek tot veel in staat. Mijn eerste serieuze computer activiteiten begonnen in het najaar van 1985 met de aanschaf van een heuse Advance B computer met Intel 8086 CPU, 256kB Ram, twee 360KB floppydrives, een cassetterecorder aansluiting. Deze IBM compatibele computer bleek niet zo compatibel met IBM. Mede daarom bleek deze computer, achteraf gezien, een goede start om kennis te maken met de vele mogelijkheden van de PC. Turbo Pascal 3 (en later versie 4) werd mijn favoriete programmeer gereedschap.

  • Het Basicode tijdperk

    In het voorjaar van 1987 had ik mijn eerste Basicode leesprogramma gelezen. Dit kwam in april 1987 in een stroomversnelling toen er een speciale Basicode-3 uitzending was waarin de Optimod wel en niet werd gebruikt. De Optimod was bedoeld om de kwaliteit van spraak en muziek te verbeteren. Alleen was het een gruwel voor computer bestanden ... Dat leidde voor mij dus tot Basicode op de PC, lees hierover meer hier. De benodigde hardware om de Basicode software op de computer in te lezen bracht KOMFA bij mij.

  • Teletekst op de computer

    The first model of the Komfa Teletext decoder with the SAA5243, 1989 In 1989 zag de KOMFA Teletekst decoder het licht. Voor deze Teletekst decoder ontwikkelde ik de MS-DOS software Telenew. Het leuke van deze decoder was de mogelijkheid om die via de parallelle printerpoort of de seriële poort van de PC te gebruiken. De allereerste versie beschikte ook over Scart aansluiting. Hiermee kon via de RGB de Teletekst eventueel direct op een geschikte TV-monitor worden bekeken. In alle latere versies is de Scart connector niet meer toegepast in het ontwerp.
    Er is zelfs een speciale interface ontwikkeld voor de MSX computer. De decoder werd aangesloten op de spelpoort!
    De Teletekst decoder is overigens ook nog gebruikt voor het ontvangen van Basicode programma's. Deze programma's werden uitgezonden door het NOS radio programma Hobbyscoop.

    Er zijn verschillende versies van de Teletekst decoder uitgebracht. De eerste versies maakten gebruik van de Philips chips SAA5231 en SAA5243. Een latere versie maakte gebruik van de Philips chip SAA5246. Uiteindelijk verscheen er ook een Teletekst decoder met TV-ontvanger. Dat ontwerp maakte gebruik van de Philips FI916E TV-tuner en de de SAA5246 als Teletekst decoder. Komfa datacast decoder with SAA5250 en 87C751 microcontroller, 1993

    Rond oktober 1993 is er een ontwerp met de Philips chip SAA5250 uitgebracht. Dit ontwerp was bedoeld om teksten (van bijvoorbeeld een krant) in te lezen die met een gewone TV-uitzending werden meegestuurd. De SAA5250 kan multi-standaard Teletekst informatie lezen (DIDO, NABTS, CEEFAX en packet 31). Nadeel van deze chip is dat deze een microcontroller nodig heeft, om te kunnen worden gebruikt. In dit ontwerp werd de 87C751 microcontroller toegepast om de SAA5250 aan te sturen. De 87C751 transporteert, via de I2C interface, de teksten van de SAA5250 naar de computer.

    Later, najaar 1997, kreeg ik tijdelijk een ontwikkelset met de Philips FI1216Mk2 TV-tuner en een RDS (SAA6588) decoder. Het leuke van die TV-tuner is dat die genoeg heeft aan één voedingsspanning van 5 volt. Die ontwikkelset heb ik later uitgebreid met stereo geluid ontvangst. De oorspronkelijk toepassing kwam daarmee te vervallen, en die was voor mij sowieso niet interessant. Een TDA9821 zorgt ervoor dat het geluid hoorbaar wordt (IF van TV-tuner omzetten naar de twee geluidskanalen). Een TDA8415 zorgt ervoor dat het geluid stereo, mono of 1-talig wordt (twee geluidskanalen analyseren, filteren en/of combineren). Resultaat is in ieder geval geluid waarvan ik dacht dat een TV die nooit zou hebben. Anno 2006 heb ik dus nog steeds een 50 cm Philips kleuren TV met mono geluid uit 1988 ...

    Een interessante ontwikkeling is de Matrox Marvel G200 videokaart. Deze gebruikt een Philips FI1216MF Mk2 TV-tuner. Lijkt hetzelfde als de gewone Mk2 versie. Echter het MF model is toch iets veelzijdiger. Lees meer hierover op de Special notes on Matrox Marvel G200 (Engelstalig!) pagina. Die Matrox Marvel biedt overigens schitterende teletekst software met fast-text en pagina surfen!

  • I2C, Telenew en de computer

    Telenew is ontwikkeld voor MS-DOS computers. In de loop der tijd is de software geschikt gemaakt voor de 80386, 80486 en Pentium 1 computers (1997). De laatst uitgebrachte MS-DOS versie is versie 2.32. Oudere software zal waarschijnlijk niet meer goed werken op de hedendaagse computers omdat die vele malen sneller zijn geworden! Toch even de proef op de som genomen met Telenew versie 2.32 op een AMD XP1600 systeem. Onder MS-DOS vindt Telenew de Teletekst decoder en de TV ontvanger netjes op COM1!
    CPU Speed limit I/O Wait CPU speed I/O speed
    AMD XP1600 1.787 123 1.962.964 12.152
    AMD K6-III/400 626 47? 687.978 13.011
    Pentium 200MMX 519 0 566.000 5.000
    Pentium 133 334 41 366.934 31.550
    AMD486DX4 PCI 151 18 166.743 28.206
    i486DX2-66 VLB 101 0 111.130 2.070
    i486SX33 VLB 66 3 73.069 9.823
    386DX33 24 0 27.313 594
    Deze waardes zijn te achterhalen door Telenew op te starten met de optie 'DEBUG'. De eerste twee waardes zijn belangrijk voor de goede werking van het programma. De laatste twee waardes geven een beeld van de werkelijke snelheid van de computer met betrekking tot de CPU rekenkracht en het uitlezen van de I/O poorten.

    Voor Windows 9x bestaat er I2C software om de TV-ontvanger aan te sturen. Er is op dit moment geen Windows 2000/XP software beschikbaar. Tenminste ik ben er niet van op de hoogte. Windows NT brengt namelijk een speciaal probleem met zich mee. Telenew maakt namelijk gebruik van een zogenaamde bit banging interface. Dat betekent dat informatie rechtstreeks bitsgewijs wordt gelezen van of geschreven naar een I/O poort. Onder Windows NT is dat niet meer toegestaan zonder gebruik te maken van speciale besturingssoftware. Daarbij komt nog dat de programmatuur gebruik maakt van wachtlusjes om de opeenvolgende lees -en schrijf acties uit te voeren. Te snel mag namelijk niet ... Voor de hedendaags computers en besturingssystemen betekent dat deze zo nu en dan niet zo nuttig bezig zijn. Hiervoor bestaat geen echte oplossing, tenzij wordt overgestapt naar een efficiëntere manier van communiceren met de I2C bus. Bijvoorbeeld gebruik maken van USB of iets dergelijks.

    Er bestaan heel veel verschillende soorten bit banging interfaces. Hier staan er een aantal op een rij. Voor het gemak heb ik de speciale PC-kaarten buiten beschouwing gelaten omdat de meeste ook gebruik maken van het bit banging protocol. Tja, dan komt het dus allemaal toch op hetzelfde neer. Dan is de meest flexibele methode toch wel om gebruik te maken van de parallelle printer -of de seriële poort.
    De verschillen zitten overigens in het aantal inverters, soms andere pen aansluitingen en soms wordt ook het SCL-in signaal niet gelezen. Dat laatste is niet altijd verstandig omdat nu een eventuele fout in het I2C protocol pas later kan worden ontdekt.

  • De Philips interface, I2C via de printerpoort

    Bijgaand het door Telenew gebruikte I2C interface waarmee de PC via de parallelle printerpoort de I2C hardware kan besturen. Dit interface is gebaseerd op het Philips voorbeeld in de ASM51 toolkit dat beschreven staat in het bestand Portmsc.prt (te vinden in het bestand PCI2CBD.ZIP). Deze schakeling is ook gepubliceerd in: Philips Semiconductors Video Products, Application note betreffende 'I2C bus specification (including fast-mode)'. Datum juni 1992, bladzijde 2-119.

                                            LS05 pin 14 (Vcc) o      -------
                                                              |      |     |   
               +--+--+---------------------+--+--+------------+------+-o 1 |
               |  |  |                     |  |  |           ===.1uF | +5V |  
     -------- [R][R][R] 3x10K       3x10K [R][R][R]   LS05    |      |     |  
     |      |  |  |  |                     |  |  |    pin 7 o-+------+-o 2 |
     | 12 o-+--+  |  |   3|\ 4             |  |  |    (Gnd)          | GND |
     | 17 o-+-----|--|----| >o-------------+--|--|--------------+    |     |
     |      |     |  |    |/        8 /|9     |  |     10 /|11  +----+-o 3 |
     | 15 o-+-----+--|--------------o< |------+--|------o< |----+    | SCL |
     |      |        |   1|\ 4        \|         |        \|         |     |
     |  9 o-+--------|----| >o-------------------+--------------+----+-o 4 |
     |      |        |    |/                            6 /|5   |    | SDA |
     | 11 o-+--------+----------------------------------o< |----+    -------
     | 10 o-+-+                                           \|          4-pin
     | 13 o-+-+--oGND                                               Connector 
     | 25 o-+-+        ------------------ Part List --------------------------
     --------          | 1 - 0.1 uF capacitor  | 6 - 10K 5% resistors        | 
     25-pin male D     | 1 - 4-pin connector   | 1 - 25-pin male D connector |
     connector to PC   | 1 - 74LS05 open collector hex inverter              |
     printer port      -------------------------------------------------------
    

    Voor Linux is er ook het een en ander ontwikkeld. Hier is veel over te vinden, als voorbeeldje zoeken naar het gebruik van deze typische Philips parallelle poort interface: philips i2c par met Google. In de Linux code wordt nog iets gezegd over I2C_ON (pen 12, no paper). In de ontwerpen wordt die wel eens via een weerstand van 10kΩ aan +5V gelegd. De KOMFA interface en de software maakt geen gebruik van die pen.

  • I2C via de printerpoort van de PC

    Er bestaan vele variaties op de Philips I2C interface. Elektuur heeft er verschillende versies van gepubliceerd. Op zich jammer is dat er niet duidelijk gekozen is voor een standaard. De volgende onderwerpen en ontwerpen heb ik, tot nu toe, kunnen vinden:

    Blad/Oorsprong SDA in SDA uit SCL in SCL uit Massa Detectie? Opmerking
    KOMFA 11 busy 1x- 9 D7 1x- 15 error 2x- 17 select input 1x- 25 - -
    Philips 11 busy 1x- 9 D7 1x- 15 error 2x- 17 select input 1x- 23,24,25 12 no paper Origineel uit databook
    Philips(variant?) 11 busy 1x- 9 D7 1x- 15 error 2x- 17 select input 1x- 10,13,25 12 no paper Versie volgens Portmsc.prt
    Elektuur Extra 3/99 11 busy 1x- 14 auto feed 1x- 15 error 2x- 17 select 1x- 18 t/m 25 12 paper empty ontwerp met Centronics, contacten omgenummerd
    Elektuur Oktober 2000 10 Ack? 1x- 3 D1 1x- 15 error 1x- 2 D0 1x- 18 t/m 25 12 no paper 1x- -
    Elektuur Juli/Augustus 1996 11 busy 2 D0 (3,9kΩ) - 5 D3 (3,9kΩ) 18 3 D1 extra lijn (via 3,9kΩ) 4 D2 5V voeding via 47 Ω
    Elektuur september 2005 10 Ack 1 Strobe - 2 D0 18 - 9 D7 5V voeding via 3,3kΩ naar SDA en 100uF naar GND
    ELV adapter 10 Ackn ?- 3 D1 ?- 15 error ?- 2 D0 ?- 18 t/m 25 11 busy high Afgeleid van linux code
    Velleman K8000 13 select ?- 14 auto feed ?- - 17 select input ?- 18 t/m 25 - Afgeleid van Velleman K8000 computer interface ontwerp

    Dan zijn er nog vele varianten in omloop die gebruik maken van de PCF8584. Omdat ik daar zelf geen ervaring mee heb opgedaan, kan ik daar niks over melden.

  • I2C via de seriële interface van de PC

    Dit was zonder meer de meest populaire interface voor de KOMFA Teletekst decoder. Uiteindelijk werd dat de standaard aansluiting (TV-tuner versie). Via de 6-polige connector kon dan eventueel alsnog een printerpoort adapter worden aangesloten.
    Achteraf bleek het MAX232 chipje dat de 9 polige seriële connector aanstuurde, nogal kwetsbaar. Tenminste bij mij was dat chipje zo kapot. De kwetsbaarheid kan veroorzaakt worden door het ontbreken van pull-up weerstanden en/of een extra buffer. Het gebruik van het chipje is voor een PC COM poort niet direct noodzakelijk. Als alternatief mag ook een transistor schakeling worden gebruikt. Voorwaarde is dat de data en klok informatie geïnverteerd worden.

    Ook voor het aansluiten van de I2C bus op de seriële poort bestaan verschillende ontwerpen. Voor de Teletekst decoder zijn er meerdere versies in omloop. Hier een overzicht van wat ik zo zelf kon achterhalen.

    Blad/Oorsprong SDA in SDA uit SCL in SCL uit Massa Detectie? Opmerking
    KOMFA1 25p 6,8 DSR,DCD 1x- 20 DTR 2x- 5 CTS 1x- 4 RTS 2x- 7 - MAX232 + transistors
    KOMFA1 9p 1,6 DSR,DCD 1x- 4 DTR 2x- 8 CTS 1x- 7 RTS 2x- 5 - MAX232 + transistors
    KOMFA2 9p 1,6 DSR(, DCD) 1x- 4 DTR 1x-? - 7 RTS 1x-? 5 - Geen SCL in
    Elektuur 9/2001 1,6 DSR,DCD 2x- 4 DTR 2x- 8 CTS 2x- 7 RTS 2x- 5 - MAX232 + 74LS06

  • I2C bus koppelingen

    Er bestaat geen standaard voor het koppelen van apparatuur via een specifieke connector. Het enige wat telt is dat de massa (GND), de data lijn (SDA) en de klok lijn (SCL) worden doorgelust. I2C is namelijk een seriële bus waarop I2C apparatuur aangesloten kan worden. Elk apparaat heeft een eigen I2C adres waarmee dat apparaat kan worden benaderd.

    Telenew heeft een aantal connector aansluitingen gebruikt. Als software ontwikkelaar vond ik dat best lastig. Het liefst maakte ik gebruik van één standaard aansluiting. Deze is er uiteindelijk wel gekomen in de vorm van een 6 polige telefoonsteker. Op de bus was ook een 12 Volt voedingspanning beschikbaar. Later is deze bus weer veranderd, maar ik dacht dat die bus niet operationeel is geworden.

     +-----------------+  Oorspronkelijk:     Latere versie:
     | | O O O O O O | |  SAA5246/TV tuner    87C751/RDS/TV tuner
     +-+             +-+  SAA5250/87C751      (zonder Teletekst?)
     |   6 5 4 3 2 1   |
     |                 |  1 = +12V            1 = +5V
     |                 |  2 = +12V            2 = Invoer/uitvoer 1
     |                 |  3 = Massa           3 = Massa
     +-+             +-+  4 = Massa           4 = Invoer/uitvoer 2
     +-----+     +-----+  5 = SDA             5 = SDA
     +-----------------+  6 = SCL             6 = SCL
    

    Voor mezelf gebruikte ik de 5 polige Din steker als bus:
    pen 1 = massa, pen 3 = +5V, pen 4 = SDA, pen 5 = SCL

    Elektuur maakt weer gebruik van een 6 polige mini-Din connector.
    pen 2 = SDA, pen 3,4 = +5V, pen 5 = SCL, pen 6 + chassis = massa
    pen 1 wordt ook wel eens gebruikt voor het interrupt signaal van de PCF8584 ...

  • Nieuwe ontwikkelingen

    Naar aanleiding van een artikel in de Elektuur van maart 2003, heb ik de I2C software voor de decoder nog eens nader bekeken. In dat artikel werd een DLL bestand gepresenteerd waarmee COM poort I/O kon worden aangestuurd. Dit leek me een interessant idee om eens nader te bekijken, zeker omdat die routines kennelijk ook geschikt zijn voor Windows NT (2000 en XP). Na enig puzzelen, blijkt Windows over een aantal zeer praktische routines te beschikken. Inmiddels is er een proefversie ontwikkeld die in staat is de TV ontvanger vanuit Windows aan te sturen via de COM poort.

    De software is geschikt voor zowel Windows 95/98 als Windows NT (2000 en XP)! De software draait zonder problemen op een Ahtlon XP 1600 systeem en de snelheid is zeer acceptabel. Deze software is geschreven in Borland C.

    Het leuke van het huidige ontwerp is dat de I2C software zelf uitzoekt welke COM poort wordt gebruikt en daarbij zelf uitpuzzelt welk type seriële I2C adapter wordt gebruikt (zie bovenstaande tabel). Eventueel niet genoemde varianten worden mogelijk ook ondersteund omdat de software een signaal inverteert wanneer dat nodig zou zijn! Voorwaarde is wel dat SDA via de DSR, DTR lijnen gaat en SCL via de RTS lijn. Ook houdt software rekening met de teruggaande SCL via CTS als die aanwezig is. Als dat signaal beschikbaar is, werkt de software overigens efficiënter en betrouwbaarder.

    De oorspronkelijk KOMFA2 hardware moet nog wel een modificatie ondergaan. De DCD en DSR lijnen moeten met elkaar worden verbonden. Dit kan eventueel via een verloopkabeltje worden gerealiseerd maar er kan ook een draadbrugje tussen de pencontacten 1 en 6 op de printplaat worden aangebracht.

    Sinds zomer 2005 is het mogelijk om Teletekst te bekijken op Windows via de oude KOMFA teletekst hardware (alleen met seriele poort interface). De software is dit keer geschreven in Pascal (Delphi 7.0 personal). De oude DOS software is voor een deel hergebruikt, gecombineerd met Windows is het een heel nieuw programma geworden met ondersteuning voor diverse soorten I2C apparaten. Wat nog ontbreekt is de oude Telenew functies voor het bekijken en opslaan van Teletekst informatie. Als afstemhulp zou het ook leuk zijn om het TV-beeld zelf te kunnen zien.

    I2C experimenteerset met TV tuner, stereo geluid, teletekst Sinds januari 2006 is het mogelijk om I2C aan te sturen op Windows NT via de Parallelle printerpoort. Er zijn een aantal oplossingen uitgeprobeerd zoals die met Giveio.sys, Zlioport.sys, Userport.sys en IO.DLL (genoemd in de Elektuur van september 2005). In ieder geval werkten IO.DLL en Userport.sys met de LPT1 aansluiting. Giveio.sys werkt niet goed, in eerste instantie leek dat te werken, alleen op een tweede computer kreeg ik het niet werkend. Uit nader onderzoek op de eerste computer, bleek dat userport het echte werk deed. Aandachtspunt is of de software ook door een normale gebruiker (zonder Administrator rechten, kan worden gebruikt). Vermoedelijk is alleen Zlioport.sys hiervoor geschikt (overigens heb ik dat nog niet uitgezocht). Opgemerkt zij nog dat voor Windows 98 een stukje inline assembler voldoende is om toegang te krijgen tot de parallelle printerpoort. Voor Windows 98 zijn er dus in principe geen speciale oplossingen nodig. Het lijkt me wel verstandig om codeer oplossingen te kiezen die zo universeel mogelijk zijn. De software is nog volop in ontwikkeling. Ondersteund wordt: afdrukken van een Teletekst pagina, de TV-ontvanger, Kopieren en Plakken in Windows, Fasttext en tot slot kan er nu gesurfed worden door de teletekst pagina's! Het surfen gaat via het aanklikken van de pagina nummers die in de Teletekst pagina kunnen voorkomen.

    Sinds juni 2006 is er een DLL waarmee I2C hardware kan worden gebruikt binnen een eigen programma. De DLL is experimenteel en is gebaseerd op het Delphi programma zodat het niet nodig was om een geheel nieuw programma te ontwikkelen met vergelijkbare functionaliteit. Deze DLL wordt gebruikt in combinatie met een heel nieuw C# (.Net) programma waarmee TV gekeken kan worden. Standaard maakt dat programma gebruik van  Windows Teletekst ondersteuning (met de Vbi codec en de Wst decoder) en de eventuele TV-kaart of video capture kaart in de computer. Helaas biedt Windows  slechts een beperkte Teletekst functionaliteit. Beter geschikt lijkt het gebruik van de Wst renderer te zijn, alleen verstrekt Microsoft hierover geen informatie. De KOMFA Teletekst decoders bieden gelukkig wel de gewenste mogelijkheden. Dankzij de DLL kan de vrij oude hardware nog steeds worden gebruikt in een moderne programmeer omgeving.

    Voor de toekomst staat op de rol:
    - Software om Teletekst onder Windows in te lezen (gewerkt wordt aan een Delphi Pascal en een C# versie).
    - Een oplossing voor de parallelle printerpoort (PCF8584 via EPP poort).
    - WDM drivers
    - Drivers zijn mogelijk ook te gebruiken via USB COM of printerpoort *).

    *) USB poorten zijn uit programmeertechnisch oogpunt moeilijker (tot niet) bit specifiek aan te sturen. Een USB COM poort communiceert prima met de seriële poort met alleen de transmit en receive lijn. Echter handshaking wordt daarbij vaak niet meer gebruikt en juist die besturingssignalen gebruikt de huidige I2C software. Een USB printerpoort biedt alleen ondersteuning om printers aan te sturen, en dit gekoppeld aan de Windows printer driver. Dit is onvoldoende flexibel voor de huidige I2C interface software implementatie.

Back to the beginning? Click here.


WelcomeSoftwareSend messageGuestbookWebsite BlogLinks RSS button

Date: 3 februari 2007