CB2 micro - Extensies

1. De Dataflash-module

De eerste aanvullende module is een ATMEL DataFlash, die wordt aangesloten op de (normaal gesproken vrije) ISP-connector. Bestanden kunnen op de module worden opgeslagen, vergelijkbaar met een diskette of USB-stick. Zowel BASIC- als binaire programma's kunnen worden opgeslagen, maar ook USER-bestanden (bijvoorbeeld voor dataloggers).

De module werkt met de AT45DB041B (512 kBytes) of de AT45DB081B (1 MByte). Het enige verschil tussen deze twee blokken is het aantal beschikbare pagina's (2048/4096). De D-types zouden ook moeten werken, maar zijn niet getest.

1.1 Schakelschema

Omdat de Dataflash een voedingsspanning van 2,7-3,3 volt nodig heeft, wordt dit eenvoudig gegenereerd door een in serie geschakelde groene of gele LED met een doorlaatspanning van ongeveer 1,8V. Een weerstand van 3,3kOhm vormt de basislast voor de LED; parallel hieraan bevindt zich een blokkeringscondensator. Deze mag niet te klein zijn om problemen te voorkomen als gevolg van de differentiële weerstand van de LED tijdens het schrijven naar de flash.

1.2 PCB-lay-out

De printplaat kan worden gemaakt van 0,4 mm epoxy om tussen de twee rijen van een tienpins-socket voor de ISP-interface te passen. De contacten aan de geleiderzijde worden direct gesoldeerd; de contacten aan de andere zijde moeten via korte draden worden verbonden met de aansluitingen op de printplaat. Hierdoor kan de printplaat worden geplaatst en weer verwijderd.

Boven de dataflash in de SOIC-28 behuizing en de SMD-LED bevinden zich links een keramische 10uF condensator en een 3,3kOhm weerstand als basislast voor de LED.

De Dataflash-module kan ook worden gebouwd zonder geëtste PCB, op een stuk proto-board. De meeste ongebruikte pinnen van de SOIC-flashchip zijn afgeknipt en de dicht bij elkaar gelegen gebruikte pinnen zijn iets gebogen om op nabijgelegen pads te kunnen worden gesoldeerd.

Jbretro heeft een PCB-lay-out voor de dataflash geproduceerd. Indien gewenst kunnen de Gerber-bestanden en de 3D-behuizing worden gedownload via de beschikbare links.

2. De 64K geheugenuitbreiding XRAM64

De XRAM64-module biedt 64 Kbytes aan extra geheugen (XMEM). Deze wordt aangesloten op de parallelle poort, die daarom niet meer bruikbaar is voor andere toepassingen. Binaire programma's kunnen het externe geheugen rechtstreeks benaderen of de bijbehorende driver-routines gebruiken. Voor BASIC-programma's moet een driver met de nodige functionaliteit worden geladen op programmalocatie 8.

2.1 Schakelschema

De 64K geheugenuitbreiding bestaat in basis uit twee SRAM's van 32 Kbytes en een CPLD, en wordt in de parallelle poort geplugd. De +5V moet echter worden aangesloten op pin 14 van de parallelle interface; bij de originele versie moet dit achteraf worden aangepast.

Met de CPLD werkt ook de relatief trage XC9536-15-PC44. Voor de SRAM moet de toegangstijd onder de 50ns liggen, anders moeten er mogelijk wachtstaten in de driver-routines worden ingebouwd. De exacte waarden van de blokcondensatoren zijn niet kritisch.

2.2 PCB-lay-out

De lay-out van de printplaat is wederom enkelzijdig, maar er moeten 7 draadbruggen worden gebruikt. Een dubbelzijdige lay-out zou ook mogelijk zijn, maar enkelzijdige printplaten kunnen met minder inspanning worden geproduceerd. De CPLD kan worden geprogrammeerd via de JTAG-connector.

2.3 Besturing

Voor de implementatie was alleen de parallelle poort beschikbaar, waardoor de adreslijnen gebufferd moeten worden. Dit zou ook gerealiseerd kunnen worden door twee registers. Een bijzonder kenmerk is de snelle incrementele toegang, die effectief slechts 3 processorclocks vereist voor lees- en schrijfoperaties. Hierdoor is bijvoorbeeld een videoresolutie van 320x240 mogelijk met 16 gelijktijdig weergavebare kleuren.

Om de module met eigen routines binnen het kader van een driver of een binair programma te kunnen aansturen, worden de verschillende cycli hieronder beschreven:

  • Bij de dalende flank van STROBE wordt het commando gelezen van de datalijnen. Momenteel wordt alleen bit 0 gebruikt om te kiezen tussen lezen (1) en schrijven (0).
  • Bij de dalende flank van BUSY worden de bovenste 8 adresbits van de datalijnen ingelezen bij STROBE = LOW en in een register vastgelegd.
  • Bij de stijgende flank van BUSY schrijft STROBE = LOW de bovenste 8 adresbits vanuit het register en de onderste 8 adresbits vanuit de datalijnen naar de adresteller.
  • Bij de stijgende flank van BUSY wordt de adresteller met 1 verhoogd wanneer STROBE = HIGH.
  • De signalen OE, WE, CS1 en CS2 worden alleen actief wanneer BUSY = LOW en STROBE = HIGH.

Tijdens de leescyclus moet worden opgemerkt dat het inlezen van de poortpinnen in de AVR eigenlijk één klokslag eerder gebeurt. Een leescyclus is dus onvermijdelijk minstens één klokcyclus langer, maar in deze tijd kan bijvoorbeeld de adresteller die uit registers is gevormd, in de ATMega worden verhoogd. In de XRAM64-drivers vindt men code-sequenties voor lezen en schrijven die ook voor eigen besturingen kunnen worden gebruikt.

3. Local Area Network (LAN)

De CB2 micro heeft een RS-232-poort die kan worden gebruikt voor punt-tot-punt communicatie tussen twee CB2 micro's, tussen een CB2 micro en een pc, of tussen een CB2 micro en een ander apparaat, zoals een seriële modem. Communicatie tussen twee punten gebeurt met een seriële kabel, ofwel rechtstreeks of als null-modem kabel. Wanneer echter meer dan twee partijen met elkaar moeten communiceren, moet er een Local Area Network (LAN) worden gecreëerd.

3.1 De hardware bouwen

Het maken van een LAN waarmee meer dan twee CB2 micro's of andere apparaten kunnen worden verbonden, is niet moeilijk. Dit gebeurt via de RS-232-poort. De enige extra hardware die nodig is, is een speciale seriële kabel om alle apparaten in het netwerk met elkaar te verbinden.

Deze seriële kabel heeft drie aparte draden: één voor TxD, één voor RxD en één voor GND. Alle CB2 micro's, pc's of andere seriële apparaten worden op deze kabel aangesloten. De kabel fungeert als een gemeenschappelijke bus.

Voor de bouw van deze kabel kun je blanke draden gebruiken, maar voor een minimale afscherming is een stereoaudiokabel aanbevolen. Deze kabel heeft twee audiokanalen omwikkeld door een gemeenschappelijke massescherm.

  1. Gebruik twee vrouwelijke seriële connectoren en verbind hun TxD-pinnen met elkaar via één audiokanaal.
  2. Verbind hun RxD-pinnen via het andere audiokanaal.
  3. Verbind de massa's (GND) via het scherm van de audiokabel.

Hiermee creëer je een punt-tot-punt rechte seriële kabel. Om een derde apparaat toe te voegen, gebruik je een extra stuk audiokabel en een derde vrouwelijke seriële connector. Verbind de TxD, RxD en GND pinnen van deze derde connector parallel aan de bestaande kabel. Herhaal dit proces voor elk extra apparaat.

Let op: RS-232 is alleen bedoeld voor korte afstanden. Goede prestaties zijn waarschijnlijk niet te verwachten bij afstanden groter dan een kamer. Ook kan er een bovengrens zijn aan het aantal aangesloten apparaten vanwege de belasting op de bus.

3.2 Voorbeelden van netwerken

Nadat de kabel is gebouwd en de apparaten zijn aangesloten, moeten de jumpers J2, J3, J4 en J5 op elke aangesloten CB2 micro worden geconfigureerd. Hiermee kunnen verschillende LAN-configuraties worden gerealiseerd zonder de kabel te hoeven wijzigen.

3.2.1 Twee CB2 micro's verbinden

Voor twee stations (A en B) is een gewone seriële kabel voldoende, maar met de LAN-kabel werkt het ook.

  • Als J2 en J3 gesloten zijn op station A, en J4 en J5 gesloten op station B, ontstaat er een null-modem verbinding. Gegevensuitwisseling kan plaatsvinden via de BASIC-editors, de CBterm en de desktops.
  • Als J2, J3, J4 en J5 op een van de twee stations allemaal gesloten zijn, worden de TxD- en RxD-lijnen kortgesloten. Dit creëert een loopback voor de zender, maar data wordt ook verzonden naar de RxD van de ontvanger. In dit geval kan data via de BASIC-editors worden overgedragen, maar zijn Xmodem-transfers (via CBterm of desktops) niet mogelijk. Chatten tussen stations is in deze modus wel mogelijk.

3.2.2 Drie CB2 micro's verbinden

Voor drie stations (A, B en C):

  • Als J2 en J3 gesloten zijn op station A, en J4 en J5 gesloten op station B en C, ontstaat er een null-modem verbinding tussen A-B en A-C. Station A kan data uitwisselen met B en C via CBterm. Echter, omdat in CBterm de initialisatie van de transmissie plaatsvindt vóór de receptie, is alleen het station dat als eerste in ontvangstmodus gaat de ontvanger.
  • Via de BASIC-editors (waar initialisatie na receptie plaatsvindt) kan station A echter gelijktijdig een programma naar B en C sturen.
  • In deze modus fungeert station A als server en B en C als clients. B en C kunnen communiceren met de server, maar niet met elkaar.
  • Als alle jumpers (J2 t/m J5) op een station gesloten zijn, ontstaat er een loopback-situatie waarbij chatten mogelijk is, maar Xmodem-transfers niet.

3.2.3 Drie CB2 micro's en een modem verbinden

Bij aansluiting van een inbelmodem en stations A, B en C:

  • Zet J2 en J3 gesloten en J4 en J5 open op alle stations.
  • Data kan worden overgedragen via de BASIC-editors. Xmodem-transfers zijn niet mogelijk.
  • Chatten tussen alle stations en de modem is mogelijk. Elke station kan de modem aansturen met AT-commando's of data verzenden naar andere modems in externe netwerken. De modem wordt effectief gedeeld tussen de stations.
  • Let op: Als de modem is uitgeschakeld, is er geen communicatie mogelijk tussen de stations, omdat de communicatie via de modem loopt.

3.2.4 Drie CB2 micro's, een pc en een modem verbinden

Bij toevoeging van een pc (bijv. met Hyperterminal op 1200 baud, 8-N-1, geen flow control):

  • De configuratie is gelijk aan het vorige voorbeeld (J2, J3 gesloten; J4, J5 open).
  • Chatten tussen alle stations, de pc en de modem is mogelijk. De modem wordt gedeeld door alle aanwezige apparaten.

3.2.5 Drie CB2 micro's, een pc, een modem en een seriële printer verbinden

Bij toevoeging van een seriële printer:

  • De configuratie blijft hetzelfde. Alles wat wordt getypt op de CB2 micro's of de pc, en alle data die via de modem binnenkomt, wordt naar de printer gestuurd.
  • De printer kan in dit scenario dienen als een ASCII-terminal, vergelijkbaar met oude teletypes.
  • Let op: Seriële printers vereisen vaak null-modem kabels. Afhankelijk van het model moet je mogelijk de TX/RX verbindingen van de LAN-connector naar de printer omwisselen.
  • Voor wie een parallelle printer heeft, kan een tweede CB2 micro worden gebruikt als seriële-naar-parallelle converter en printserver via het printSRV programma.

3.3 Netwerkapplicaties schrijven

Het netwerken via de seriële LAN-kabel beïnvloedt de fysieke laag. Eenvoudige routering wordt bepaald door de jumpers, maar op de applicatielaag is er veel meer flexibiliteit. Omdat er geen standaard protocol zoals TCP/IP is, moet je zelf een communicatiemethode bedenken. Dit kan variëren van eenvoudige seriële data-overdracht tot geavanceerde pakketgebaseerde netwerken.

Voor applicaties met meerdere clients is het raadzaam om:

  • Een mechanisme te implementeren om clients te identificeren.
  • Een methode te gebruiken om data-overdracht te beperken wanneer een andere client al zendt (omdat de transmissie asynchroon is).
  • Identificatie-codes toe te kennen aan clients zodat de applicatie alleen reageert op specifieke aanroepen.

4. Externe EEPROM-uitbreiding

Externe seriële EEPROM's van het type 24C64 t/m 24C512 kunnen worden toegevoegd aan de CB2 micro via de I2C-bus.

4.1 Schakelschema

Het schema toont twee EEPROM's verbonden met de CB2 micro. Adressen 0 en 1 (eerste en tweede chip) zijn voorbedraad. Het gebruikte adres kan in het configuratiemenu worden geselecteerd; XPOKE en XPEEK werken alleen met dit geselecteerde adres. Je kunt dus niet beide EEPROM's tegelijkertijd in een programma gebruiken, maar moet wisselen via het menu wanneer het eerste geheugenchip vol is.

5. Toevoeging LPT-connector

Vanwege kosten en de ouderdom van de connector is de Sub-D 25 connector geen standaardonderdeel van de CB2 micro, hoewel LPT-printfunctionaliteiten wel worden ondersteund.

5.1 Schakelschema

Het schakelschema voor de toevoeging van de printerconnector is beschikbaar. Er zijn stroombegrenzingsweerstanden opgenomen. Het wordt sterk aangeraden om stroombegrenzingsweerstanden te gebruiken, zelfs als je de kale I/O-pinnen van de MCU gebruikt voor metingen of apparaatsbesturing.

6. De CB2 micro reflashen

De CB2 micro wordt geleverd met een geprogrammeerde chip. Echter, bij een nieuwe versie van AVR chipbasic is het nodig de firmware te upgraden. Hiervoor moet je zelf een eenvoudige programmeur bouwen.

6.1 Schakelschema programmeur

De programmeur wordt aangesloten op de ISP/SPI-poort van de CB2 micro. De CB2 micro moet worden gevoed voordat het reflashen begint. Gebruik een seriële kabel om de programmeur te verbinden met de RS-232 poort van je pc. Let op: sommige USB-naar-serieel adapters of laptop-poorten werken mogelijk niet; gebruik indien mogelijk een echte RS-232 poort op een desktop-pc.

6.2 Reflash-procedure

De software die wordt gebruikt is PonyProg (werkt voornamelijk op oudere Windows-versies).

  1. Interface Setup: Configureer PonyProg om met de programmeur te werken via het menu "Setup" → "Interface Setup".
  2. Kalibratie: Selecteer "Setup" → "Calibration".
  3. MCU Type: Selecteer "AVR micro" en stel het type in op ATmega644.
  4. Bestand laden: Open het systeem-hex-bestand van AVR chipbasic via "File" → "Open Program (FLASH) File...".
  5. Configuratie: Ga naar "Command" → "Security and configuration bits", pas de instellingen aan en klik op OK.
  6. Schrijven: Selecteer "Command" → "Write all". Negeer eventuele waarschuwingen of verificatiefouten tijdens het flashen.
  7. Afronding: Verwijder de programmeur en test of de CB2 micro correct opstart.

7. Batterij-voeding (PSU)

Deze extensie maakt het mogelijk de CB2 micro te voeden met vier AA- of AAA-batterijen (1,5V alkaline of 1,2V Ni-MH/Ni-Cd oplaadbaar). De PSU is ontworpen op basis van de volgende criteria:

  • Gebruik van de meest voorkomende batterijtypes (AA/AAA).
  • Compatibel met Alkaline, Ni-MH, Ni-Cd, etc.
  • Regelaar levert een stabiele 5V, ongeacht het batterijtype.
  • Gebruik van een "low dropout" regelaar om onnodige extra batterijen te voorkomen.
  • Maximaal stroomverbruik van 200mA, wat voldoende ruimte biedt voor de CB2 micro en andere low-power apparaten.
  • Indicator voor een lage batterijspanning, instelbaar door de gebruiker.

Testresultaten:

  • AA oplaadbaar: 24 uur continu gebruik.
  • AAA oplaadbaar: 10 uur continu gebruik.

7.1 Schakelschema

In het schema kan een trimmerweerstand worden vervangen door twee vaste weerstanden (ca. 560k van VCC naar wiper en ca. 220k van wiper naar GND) voor de indicator van de lage batterijspanning.

8. Color Composite Video / S-video

De CB2 micro heeft een grijstoon composite video-uitgang (B/W out pad op de PCB). Voor kleur composite video of S-video kan een converter worden gebouwd met de AD724-chip.

8.1 Schakelschema

Met een jumper op pin 1 kan worden gekozen tussen PAL of NTSC. Hiervoor moet op pin 3 een verschillende kristalfrequentie worden gebruikt. De jumper op pin 12 selecteert tussen de lage of hoge frequentieparen; de lage frequentie wordt aanbevolen. Voor enkel composite video kunnen pinnen 9 en 11 onverbonden blijven en de bijbehorende componenten worden verwijderd.

Belangrijk: Om dit circuit te gebruiken, moet pin 25 van de ATMEGA644P handmatig aan de massa worden gelegd, zodat pin 19 een Hsync-signaal uitvoert in plaats van het standaard Csync.

9. PS/2 Toetsenbord

Deze extensie is een zelfgemaakt PS/2-toetsenbord, ingediend door Wolfgang Schmidt. Het is geen volledig 102-toetsenbord, maar een 51-toetsenbord, wat voldoende is voor bijna alle functies van de CB2 micro.

9.1 Schakelschema

Elke toets in de matrix kortsluit de rij en kolom eronder wanneer deze wordt ingedrukt. Een voorgestelde lay-out is beschikbaar, maar eigen lay-outs zijn mogelijk.

9.2 Firmware

De broncode (BasCom), het HEX-bestand en de codetabel zijn beschikbaar via de externe links. Let bij het branden van de firmware op de juiste fuses.

10. 3D-geprinte behuizing

Een 3D-geprinte behuizing, ingediend door Evilged.

10.1 Informatie en bestanden

De behuizing bestaat uit twee delen (boven- en onderkant) die in elkaar klikken en de PCB inklemmen; er worden geen schroeven gebruikt. Er zijn openingen aan de bovenzijde voor toegang tot jumpers en poorten. Nabij de AF out en B/W out pads zijn gaten aanwezig voor RCA-connectoren. De bestanden zijn gemaakt in Fusion 365 en kunnen worden gedownload voor 3D-printen.

11. USB-connectiviteit

Deze extensie voegt USB-connectiviteit toe, waardoor een pc met een RS-232 poort niet langer nodig is voor het overzetten van programma's.

11.1 Schakelschema

Het circuit is eenvoudig: een enkele chip (beschikbaar in through-hole package) en een USB-connector. Omdat de adapter is verbonden met de UART van de CB2 micro, moet de instelling "Serial In/Out" in het configuratiemenu op "standard" worden gezet.

11.2 Drivers

Windows 10 herkent het apparaat meestal direct als een virtuele COM-poort. Voor andere systemen zijn drivers en utilities voor de MCP2221A beschikbaar voor:

  • Windows (Driver en Installer)
  • Linux (Driver informatie)
  • Mac (Driver informatie)
  • Android (MCP2221 Terminal App)
  • Overige: MCP2221 Utility, DLL, I2C/SMBus Terminal, Command Line Interface en Java Native Interface.

12. RF-modulator

Deze extensie maakt aansluiting op zeer oude televisies of handheld TV's mogelijk die alleen een antenne-ingang hebben. Hij is ontworpen voor grijstoon video.

De RF-modulator neemt het grijstoon-videosignaal van de "B/W out" pad en gebruikt dit om het RF-draaggolfsignaal (en de harmonischen) amplitudmodulation. Er wordt geen aparte RF-oscillator gebruikt; het signaal wordt afgenomen van de kristalklok van de CB2 micro. Het 20MHz RF-signaal op pin 12 van de MCU is driehoekig en rijk aan harmonischen in het VHF-gebied.

12.1 Schakelschema

Het signaal wordt via een kleine condensator (voor isolatie) ingevoerd naar de RF-uitgang. De basisband-video wordt naar de diode gestuurd, wat de RF effectief moduleert. Met een variabele trimmer kan de videokwaliteit op de gewenste harmonische worden geoptimaliseerd.

13. Joystick

Deze extensie voegt joystick-ondersteuning toe, geschreven door jbtech.

13.1 Informatie en bestanden

In het beschikbare zip-bestand staat alle informatie voor de bouw, inclusief een lijst met games die zijn geconverteerd voor gebruik met deze joystick-extensie. Lees de README.txt voor belangrijke instructies.

14. Modem

Sinds firmware V1.54 (die 75 baud seriële communicatie ondersteunt) is het mogelijk een eenvoudig modem te bouwen van discrete componenten. Deze 75 baud UART/Audio modem-extensie is gemaakt door KOS. Hij maakt het mogelijk data te verzenden naar apparaten die audio ondersteunen, zoals cassettespelers (voor opslag), HAM-radio's of via het telefoonnetwerk (akoestische koppelaars). Het is compatibel met Bel 202 frequenties, maar met een snelheid van 75 baud.

Voor de werking moeten de volgende instellingen in het configuratiemenu worden gebruikt:

  • Serial speed: 75 (1)
  • Serial In/Out: standard
  • Serial Input: PD1

Men kan kiezen tussen de UART-modem (Serial In/Out: standard) of de RS-232 (Serial In/Out: simple), maar niet beide tegelijk.

14.1 Schakelschema

Het circuit bestaat uit een modulator (zender), verbonden met pin 18 (TTL TXD1), en een demodulator (ontvanger), verbonden met pin 15 (TTL RXD1).

JBretro heeft een PCB-versie van dit modem gemaakt voor directe aansluiting op de DB-9 connector van de CB2 micro. Let op: hoewel er een DB-9 connector wordt gebruikt, is dit geen algemeen RS-232 compatibel modem; de connector is enkel bedoeld om extra kabels bij de UART-pinrij te vermijden.