Project Radar Boards Schiphol Control: verschil tussen versies

Uit MakerSpace Leiden
Ga naar: navigatie, zoeken
 
(88 tussenliggende versies door 4 gebruikers niet weergegeven)
Regel 1: Regel 1:
 
[[Bestand:schiphol-in-use.jpg|miniatuur|display in use (top left hand corner)]]
 
[[Bestand:schiphol-in-use.jpg|miniatuur|display in use (top left hand corner)]]
 
+
[[Category:Historic projects]]
We got a pile of Control Tower displays from Schiphol airport (or Eurocontrol, etc) used for tracking what is in the air.
+
We got a [[https://wiki.makerspaceleiden.nl/mediawiki/index.php/Categorie:SchipholElektronica pile of Control Tower displays from Schiphol airport (or Eurocontrol, etc)]] used for tracking what is in the air.
  
 
They are basically small 2-3 CPU boards on a common RS 485 bus or on RS 232. One CPU is purely for programming. The other is the main board and handles the traffic on the bus (it may be ASTERIX format?) and the other handles the display. They are interconnected by a TTL serial on 9600 8N1. Each box also contains a high quality PSU.
 
They are basically small 2-3 CPU boards on a common RS 485 bus or on RS 232. One CPU is purely for programming. The other is the main board and handles the traffic on the bus (it may be ASTERIX format?) and the other handles the display. They are interconnected by a TTL serial on 9600 8N1. Each box also contains a high quality PSU.
Regel 13: Regel 13:
 
Some fairly functional code: https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol
 
Some fairly functional code: https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol
  
[[Bestand:schiphol-first-light.mov|320px]]
+
[[Bestand:schiphol-first-light.mov|320px]]<br>
 +
[https://www.youtube.com/watch?v=RdrHZAX6c4I grote (50229) display eerste test-tekst (youtube)]
  
 
= Schiphol Airtraffic Control displays =
 
= Schiphol Airtraffic Control displays =
 +
<tabs>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50xxx                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name="main board 50xxx>
 +
 +
Connection on the main bord - top row near the yellow 'TOP1' label. Shared by all 50XXX boards.
 +
 +
Wiring / pinout main CPU board
 +
 +
[[Bestand:radarboard-pinout-main.jpg|480px|wiring for programming]].
 +
 +
{| class="wikitable"
 +
|-
 +
| TOP 1 || SCK of CPU display board
 +
|-
 +
| TOP 2 || MISO  of CPU display board
 +
|-
 +
| TOP 3 || MOSI  of CPU display board
 +
|-
 +
| TOP 10 || RST  of CPU display board
 +
|-
 +
| TOP 13,14 || TX/RX  of CPU display board
 +
|-
 +
| BOT far left/right || Power
 +
|-
 +
|}
 +
 +
Progamming cable ATMEL [[Bestand:atmel-isp-pinout.png|180px]] [[Bestand:atmel-isp-pinout-2.jpg|180px]] to which this needs to be connected.
 +
</tab>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50.028                    -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name = "board 50.028">
 +
 +
Dit is het board met 6 rode displays en een panduit 64-pins connector. Er zit geen "slimmigheid" (logica of mcu) op dit board.
 +
Het lijkt erg op de 50.219.
 +
 +
<gallery>
 +
Bestand:50028voorkant.jpeg|Voorkant 50.028
 +
50028achterkant.jpeg|Achterkant 50.028
 +
</gallery>
 +
 +
De displays op dit board zijn van het type DLO3416 [[:File:0900766b808b01d8.pdf | datasheet]]. Deze hebben 6 datalijnen, een !WR lijn die aangeeft wanneer deze datalijnen gelezen moeten worden, 2 adreslijnen die aangeven welk van de 4 digits wordt aangestuurd, en 4 chip-enable lijnen die gebruikt kunnen worden om individuele displays aan te sturen. CE1 en CE2 zijn actief hoog, !CE3 en !CE4 zijn actief laag, op die manier kan door lijnen samen te nemen adressering gedaan worden.
 +
 +
Op het 50.028 board zitten de diverse Chip Enable lijnen dus ook aan elkaar op een manier dat adressering van de 6 individuele displays mogelijk is.
 +
 +
Ik reken de plek waar een "P" in de connector staat als pin 1, en tel vervolgens als volgt:
 +
{| class="wikitable"
 +
|-
 +
| 1 || 3 || 5 || ...|| 63
 +
|-
 +
| 2 || 4 || ...|| 62 || 64
 +
|}
 +
 +
[[Bestand:Schipholdisplay50028achterkant.jpeg|miniatuur|center|Pin 1 markering met een p?]]
 +
 +
De pin-out wordt dan: (Let op, nog niet gecontroleerd! Dit is met een multimeter uitgepiept maar ik heb het display nog niet aangesloten/aangestuurd).
 +
Pinnen die aan elkaar zitten hebben 1 rij in de tabel. Pinnen die niet verboden zijn, zijn weggelaten.
 +
Voor de chip-enable lijnen is een eigen tabel
 +
 +
{| class="wikitable"
 +
|-
 +
! pin(nen) !! Display-pinfunctie
 +
|-
 +
| 1,2,3,4 || 5 V voeding
 +
|-
 +
| nc pinnen!
 +
|-
 +
| 7,8 || !CLR (van alle displays samen)
 +
|-
 +
| 9,10 || !WR (van alle displays samen)
 +
|-
 +
| 11,12 || A1 (van alle displays samen)
 +
|-
 +
| 13,14 || A0 (van alle displays samen)
 +
|-
 +
| 15,16 || Chip enable, zie andere tabel (CE2 E,B,D ; !CE4 A,C,F)
 +
|-
 +
| 17,18 || Chip enable, zie andere tabel (CE1 D ; CE2 B ; !CE3 A ; !CE4 E,B)
 +
|-
 +
| 19,20 || Chip enable, zie andere tabel (CE1 B,F ; CE2 A; !CE3 C,E ; CE4 D)
 +
|-
 +
| 21,22 || Chip enable, zie andere tabel (CE1 A,C,E ; !CE3 B,D,F)
 +
|-
 +
| 23,24 || CU (cursor select) (van alle displays samen)
 +
|-
 +
| 25,26 || CUE (Cursor select) (van alle displays samen)
 +
|-
 +
| 27,28 || D6 (van alle displays samen)
 +
|-
 +
| 29,30 || D5 (van alle displays samen)
 +
|-
 +
| nc pinnen!
 +
|-
 +
| 33,34 || D4 (van alle displays samen)
 +
|-
 +
| 35,36 || D3 (van alle displays samen)
 +
|-
 +
| 37,38 || D2 (van alle displays samen)
 +
|-
 +
| 39,40 || D1 (van alle displays samen)
 +
|-
 +
| 41,42 || D0 (van alle displays samen)
 +
|-
 +
| 43 || BL (blanking) F
 +
|-
 +
| 44 || BL (blanking) D
 +
|-
 +
| 45 || BL (blanking) B
 +
|-
 +
| 46 || BL (blanking) E
 +
|-
 +
| 47 || BL (blanking) C
 +
|-
 +
| 48 || BL (blanking) A
 +
|-
 +
| NC pinnen!
 +
|-
 +
| 61,62,63,64 || GND
 +
|-
 +
|}
 +
 +
Waarbij de adressering van de displays overzichtelijker te zien is als je het als volgt weergeeft:
 +
 +
{| class="wikitable"
 +
|-
 +
! display !! 15 !! 17 !! 19 !! 21
 +
|-
 +
| A || L || L || H || H
 +
|-
 +
| B || H || L || H || H
 +
|-
 +
| C || L || H || L || H
 +
|-
 +
| D || H || H || L || H
 +
|-
 +
| E || H || L || L || H
 +
|-
 +
| F || L || H || H || H
 +
|-
 +
|}
 +
 +
De displays op de print zijn hierbij genummerd als
 +
{| class="wikitable"
 +
|-
 +
| A || B
 +
|-
 +
| C || D
 +
|-
 +
| E || F
 +
|}
 +
 +
[[Bestand:Schipholdisplay50028.jpeg|miniatuur|center|nummering afzonderlijke displays en onderscheid tussen "display" en "digit"]]
 +
 +
De displays zijn dus te adresseren door middel van de adreslijnen op pinnen 15,17,19,21 (chip enable lijnen). De digits binnen een display door middel van de A0 en A1 adreslijnen.
 +
</tab>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50219                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name="board 50219">
 +
Lijkt erg op de [[Board 50.028]] maar bevat een potmeter om de helderheid in te stellen en wat logica. Pinout/aansturing: TODO / nog uit te zoeken.
 +
</tab>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50226                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name="board 50226">
 +
Het "landingsbanen-display" 50226.
 +
[[Bestand:50226.jpeg|miniatuur|Het landingsbanendisplay printje.]]
 +
 +
Deze print heeft 2 voedingsspanningen nodig. De microcontroller heeft 5 V nodig. De LED's (vermoedelijk) 12 V. Let op dat er geen 12 V op de microcontroller terecht komt (hetzij voeding, hetzij I/O) ! (Dan gaan er dingen stuk)
 +
 +
= pin-out connector =
 +
{| class="wikitable"
 +
|-
 +
| 1 NC || 2 NC
 +
|-
 +
| 3 NC || 4 NC
 +
|-
 +
| 5 ? || 6 ?
 +
|-
 +
| 7 RST || 8 SCK
 +
|-
 +
| 9 MISO || 10 MOSI
 +
|-
 +
| 11 RXD0 || 12 TXD0
 +
|-
 +
| 13 SS || 14 Vdd (5 V)
 +
|-
 +
| 15 Vdd (5 V)  || 16 VLEDs (12 V)
 +
|-
 +
| 17 VLEDs (12 V) || GND
 +
|-
 +
| GND || GND
 +
|}
 +
 +
LET OP dat de microcontroller maximaal 5 V mag! Kijk dus uit waar de 12 V terecht komt als je met losse draadjes prototyped.
 +
 +
= pin-out MCU =
 +
De 50226 bevat een Atmega161, en 4 stuks HEF4081 (ieder 4 2-input NAND poorten). Via een transistortje of fetje worden de LED's naar gnd geschakeld, gestuurd vanuit de uitgangen van de AND gates. De ingangen van de AND gates gaan naar de Atmega161. De 2e ingang van alle and-gates is met elkaar verbonden, en zit op pin 26 van de AVR: PE2/OC1B. Dit is een PWM uitgang. Zo kunnen de LED's gezamelijk gedimd worden (PWM uit OC1B), terwijl de LEDs elk afzonderlijk aan of uit gezet kunnen worden met elk een eigen I/O.
 +
 +
Er zijn ook 2 schakelaartjes. Die het dichtst bij de hoek van de print noem ik SW2 / brightness down.
 +
 +
In elk "wit blokje" zitten 2 LEDs. Om onderscheid te maken welke LED welke is, is het waarschijnlijk handig de namen van de start/landingsbanen aan te houden. De LEDs van een baan worden in 2 helften aangestuurd. Bij 18R/36L zijn dit 3 delen.
 +
 +
De namen van de banen: https://www.openstreetmap.org/#map=15/52.3131/4.7479. Let er dus op dat 18R/36L, 18L/36R en 36C/18C 3 verschillende banen zijn!
 +
(De getallen zijn kompasrichtingen, 36=360 graden. LRC zijn respectievelijk Spoelen, Weerstanden en Condensatoren, of binnen deze context vermoedelijk Left, Right en Center.)
 +
 +
Behalve de banen zit er nog een blokje in de hoek, in de tabel aangeduid als "Led binnenkant blokje" en "led buitenkant blokje" (mogelijk/waarschijnlijk gezien de ligging een heliport).
 +
 +
 +
{| class="wikitable"
 +
|-
 +
| 1 || MOSI - pin 9 connector
 +
|-
 +
| 2 || MISO - pin 10 connector
 +
|-
 +
| 3 || SCK - pin 8 connector
 +
|-
 +
| 4 || RST - pin 7 connector
 +
|-
 +
| 5 || RX - pin 11 connector
 +
|-
 +
| 6 || NC
 +
|-
 +
| 7 || TX - pin 12 connector
 +
|-
 +
| 8 ||
 +
|-
 +
| 9 ||
 +
|-
 +
| 10 || PD4 led "buitenkant" (HELI?) blokje
 +
|-
 +
| 11 ||
 +
|-
 +
| 12 ||
 +
|-
 +
| 13 ||
 +
|-
 +
| 14 ||
 +
|-
 +
| 15 ||
 +
|-
 +
| 16 ||
 +
|-
 +
| 17 ||
 +
|-
 +
| 18 || PC0 LED baan 9/27 helft
 +
|-
 +
| 19 || PC1 LED baan 9/27 helft
 +
|-
 +
| 20 || PC2 LED baan 18L/36R, zij-helft (1/3)
 +
|-
 +
| 21 || PC3 LED baan 18L/36R, midden/3e helft (3/3)
 +
|-
 +
| 22 || PC4 LED baan 18L/36R, zij-helft (2/3)
 +
|-
 +
| 23 || PC5 LED "binnenkant" (HELI?) Blokje
 +
|-
 +
| 24 || SW1 (brightness UP)
 +
|-
 +
| 25 || SW2 (brightness DWN)
 +
|-
 +
| 26 || LED DIMMING (OC1B/PE2). Actief hoog.
 +
|-
 +
| 27 ||
 +
|-
 +
| 28 ||
 +
|-
 +
| 29 ||
 +
|-
 +
| 30 || PA7 LED baan 04/22 helft
 +
|-
 +
| 31 || PA6 LED baan 04/22 helft
 +
|-
 +
| 32 || PA 5 LED baan 06/24 helft
 +
|-
 +
| 33 || PA 4 ED baan 06/24 helft
 +
|-
 +
| 34 || PA3 LED baan 36C/18C helft
 +
|-
 +
| 35 || PA2 LED baan 36C/18C helft
 +
|-
 +
| 36 || PA1 LED baan 18R/36L helft (in het verlengde van "COMP SIDE")
 +
|-
 +
| 37 || PA0 LED baan 18R/36L helft (in het verlengde van "COMP SIDE")
 +
|-
 +
| 38 || VCC
 +
|-
 +
| 39 ||
 +
|-
 +
| 40 ||
 +
|-
 +
| 41 ||
 +
|-
 +
| 42 ||
 +
|-
 +
| 43 ||
 +
|-
 +
| 44 || SS - pin 13 connector
 +
|-
 +
|}
 +
</tab>
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50227                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name = "board 50227">
 +
[[Bestand:Datasheet-display-50227-back.jpg| 320px]]
 +
[[Bestand:Datasheet-display-50227-front.jpg|320px]]
 +
 +
Seems similar to the [[Board 50229|50229]] board, but other display type (DLO1414 vs PD4435), other MCU (atmega161 where 50229 has a '162), and more buttons.
 +
 +
Seems like we have just 1 of this board. It might be similar to [[:Bestand:IMG_8958.jpeg]] which then would be a second one.
 +
 +
== buttons ==
 +
4 extra buttons; wired between row 0/1, row 1/2 and col 1/2, col 2/3.
 +
 +
== display mapping ==
 +
 +
6 displays (DLO1414) - mapped per below; with from left to right in each screen '3210'.
 +
 +
[[Bestand:Datasheet-display-50227-dmap.jpg|320px]]
 +
 +
Displays zitten aangesloten volgens het voorbeeld uit de datasheet, op de 74HC138 rechtsboven de atmega161.
 +
 +
[[Bestand:50227displaysschema.png|400px|Display schematic 50227]].
 +
 +
Echter, er worden meer enable-pinnen gebruikt dan in het voorbeeld schema. Zie onderstaande tabel. Tussen haakjes de namen uit de 74HC138 datasheet achter de namen uit het voorbeeldschema.
 +
 +
{| class="wikitable"
 +
|-
 +
! Atmega161 !! 74hc138
 +
|-
 +
| pin 24 PC3 || A (A0)
 +
|-
 +
| pin 25 PC4 || B (A1)
 +
|-
 +
| pin 26 PC5 || C (A2)
 +
|-
 +
| pin 27 PC6 || G (E3)
 +
|-
 +
| pin 28 PC7 || (nE1)
 +
|-
 +
| pin 16 PD6 nWR || (nE2)
 +
|}
 +
 +
De datalijnen D0-D6 zitten op PA0-PA6 van de atmega161 (pin 39 PA0 tot pin 33 PA6). Er is bij dit type display geen D7.
 +
 +
= reading the buttons =
 +
The 21 buttons are mostly in a 4x4 matrix. Every switch is between two MCU pins. The pins not fitting in the matrix are between 2 rows or 2 collumns.
 +
 +
The buttons 1, 2, 3 on the left are named 1, 2, 3 in the tables as well. The buttons labeled 1, 2, 3 on the right are labeled 1' 2' 3' as these are not in parallel with the others labeled 1, 2, 3.
 +
 +
 +
{| class="wikitable"
 +
|-
 +
| row/col || '''PD2 (C0)''' || '''PD3 (C1)''' || '''PD4 (C2)''' || '''PD5 (C3)'''
 +
|-
 +
| '''PB3 (R3)''' || 36C || 2' || 3 || 04
 +
|-
 +
| '''PB2 (R2)''' ||  24 || 18C || 1 || 2
 +
|-
 +
| '''PB1 (R1)''' || 27 || 36R || 36L || 1'
 +
|-
 +
| '''PB0 (R0)''' ||  HELI || 09 || 18L || 18R
 +
|}
 +
 +
The keys that are between 2 row lines or between 2 collumn lines can be re-fitted in another matrix:
 +
(Possibly other configurations are possible and maybe even more efficient! By choosing other row/col lines in software for the same hardware)
 +
{| class="wikitable"
 +
|-
 +
| row/col || '''PD5 (C3)''' || '''PB2 (R2)''' || '''PD3 (C1)''' || '''PB0 (R0)'''
 +
|-
 +
| '''PD4 (C2)''' || 3' || . || EXEC || .
 +
|-
 +
| '''PB3 (R3)''' || . || CORR || . || .
 +
|-
 +
| '''PB1 (R1)''' || . || 22 || . || 06
 +
|}
 +
 +
The keys are thus NOT the same als on [[Board 50229|50229]].
 +
 +
Keys in the matrix are read by setting all row/col pins to input, setting pull-ups on all collumns but leaving rows open. Then one by one set rows low and read collums.
 +
 +
= LEDS =
 +
An identical circuit with a 74hc138 and 74hc174 seems to have been applied, as on [[Board 50229|50229]], connected to the same I/O lines. Because there are more LED's, port A5 is also used for an extra bit.
 +
 +
PORTA 0 downto 5 is used to load LED data into the 74HC174 flipflops, a 74HC183 is used to select which of the flipflops is put through to the leds. On 50227 there are 21 LED's. The unused last 3 inputs of the 4th flipflop are held high.
 +
 +
To enable the demux that is driving the flipflop clock:
 +
* nE1 connects to PC6 - drive LOW to enable LED's
 +
* nE2 connects to PC7 - drive LOW to enable LED's
 +
* E3 connects to PC5 - drive HIGH to enable LED's
 +
 +
The adress lines are as folows (This selects which one of the flipflops/registers is put trough to the leds)
 +
* A0 connects to PC3
 +
* A1 connects to PC4
 +
* A2 connects to PD6
 +
 +
The flipflop datalines:
 +
* D0 connects to PA0
 +
* D1 connects to PA1
 +
* D2 connects to PA2
 +
* D3 connects to PA3
 +
* D4 connects to PA4
 +
* D5 connects to PA5
 +
 +
So this is how to drive the LED's:
 +
 +
* Drive all adress lines (PC3,4 & PD6) low, so none of the clock inputs is driven.
 +
* Put data on PA0..5 as per below table
 +
* Choose 74hc174 as per below table
 +
* Set adress lines such that the 174 gets a rising clock edge so it clocks the data to the LED's
 +
* repeat
 +
 +
{| class="wikitable"
 +
|-
 +
| '''PA0''' || 18R || 36R || 04 || CORR
 +
|-
 +
| '''PA1''' || 18C || 27 || 3' || 3
 +
|-
 +
| '''PA2''' || 09 || 2 || 2' || EXEC
 +
|-
 +
| '''PA3''' || HELI || 1 || 36C || unused
 +
|-
 +
| '''PA4''' || 1' || 18C || 06 || unused
 +
|-
 +
| '''PA5''' || 36L || 24 || 22 || unused
 +
|-
 +
|  74HC174 nummer : || 0 || 1 || 2 || 3
 +
|}
 +
</tab>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50228                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name="board 50228>
 +
The "standard" display that we seem to have a lot of. Has an Atmega161.
  
 
[[Bestand:Datasheet-display-board-both.jpg|miniatuur]]
 
[[Bestand:Datasheet-display-board-both.jpg|miniatuur]]
Regel 62: Regel 517:
 
ABC worden alleen gebruikt - en schakelen het display
 
ABC worden alleen gebruikt - en schakelen het display
  
=== Multiplexer numbering ===
 
 
[[Bestand:schiphol-mul-num.png|420px]]
 
  
 
== ATMEGA 161L ==
 
== ATMEGA 161L ==
  
See also https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol/blob/main/pins.h -- which has been tested against the actual board.
+
See also https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol/blob/main/50228/pins.h -- which has been tested against the actual board.
  
 
{| class="wikitable"
 
{| class="wikitable"
Regel 170: Regel 622:
  
 
[[Bestand:schiphol-mul-disp-num.png|420px]]
 
[[Bestand:schiphol-mul-disp-num.png|420px]]
 +
</tab>
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 50229                      -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name = "board 50229">
 +
[[Bestand:voorkant50229.jpg|miniatuur|center|Voorkant van 50229 nummer 17, voor de aanduidingen van de displays, schakelaars/leds etc]]
 +
 +
[[Bestand:achterkant50229.jpg|miniatuur|center|Achterkant van 50229 nummer 17, voor de aanduiding welk IC waar zit]]
 +
 +
== Main connector ==
 +
 +
{| class="wikitable"
 +
|-
 +
| 1 NC || 2 NC
 +
|-
 +
| 3 NC || 4 NC
 +
|-
 +
| 5 ? || 6 ?
 +
|-
 +
| 7 RST || 8 SCK
 +
|-
 +
| 9 MISO || 10 MOSI
 +
|-
 +
| 11 RX0 || 12 TX0
 +
|-
 +
| 13 SS || 14 Vdd
 +
|-
 +
| 15 Vdd || 16 ?
 +
|-
 +
| 17 ? || GND
 +
|-
 +
| GND || GND
 +
|}
 +
De main connector komt dus overeen met die van de 50228
  
=== Datasheet displays ===
+
=display control=
 +
De displays op de 50229 zijn PD4435, dus dezelfde als op de 50229 maar anders dan op de 50.028. De aansturing ervan is dus ook anders. [[:Bestand:PD-series-displays-datahsheet.pdf|datasheet PD443 series]].
  
The photo's are from the card with the  6 displays of type PD443.
+
De aansturing lijkt erg op het voorbeeld uit de datasheet:
  
[[Bestand:PD-series-displays-datahsheet.pdf|340px]]
+
[[Bestand:Datasheet-display-schiphol-sample.png|420px]]
 +
* nWR van de displays zitten allemaal aan elkaar en aan PD6 (pin 16) van de ATMega162.
 +
* RD van de displays zitten allemaal aan elkaar en aan PD7 (pin 17) van de ATMega162.
 +
* CLKIO van alle displays zit aan elkaar (en verder nergens aan)
 +
* CLKSEL van alle displays op 1 na zit aan VCC, die ene zit aan GND. Dat is het display linksboven (A).
 +
* nRST van alle displays zitten aan elkaar en op PE2 (pin 29) van de ATMega162
 +
* Alle Adreslijnen voor het selecteren van digits zitten 1 op 1 aan elkaar (A0 aan A0 van alle displays, A1 aan A1, A2 aan A2).
 +
** A0 zit op PC0 (Pin 21)
 +
** A1 zit op PC1 (Pin 22)
 +
** A2 zit op PC2 (Pin 23)
 +
* De datalijnen zitten ook 1 op 1 aan elkaar (D0 aan D0, D1 aan D1, etc) van alle displays. Ze zitten op port A (D0 op PORTA0, D1 op A1, etc tot en met D7 op PORTA7)
 +
* CE1 en nCE0 wordt gebruikt om te selecteren welk display wordt aangestuurd en zit iets ingewikkelder in elkaar. (Na de omschrijving welk signaal waar aan zit volgt een tabel hoe welk display aan te sturen)
 +
** CE1 van de bovenste 2 rijen (A tm H - zie foto) zit aan PC6 (Pin 27 AVR - gedeeld met de 2e demux, zie aansturing LED's)
 +
** CE1 van de onderste 2 rijen (I tm P - zie foto) zit aan PC7 (Pin 28 AVR - gedeeld met de 2e demux, zie aansturing LED's)
 +
* nCE0 zit steeds aan 2 displays: eentje uit de bovenhelft en eentje uit de onderhelft. Deze wordt gestuurd vanuit de 1e demux.
 +
** Display A en I zitten aan nY0
 +
** Display B en J zitten aan nY1
 +
** Display C en K zitten aan nY2
 +
** Display D en L zitten aan nY3
 +
** Display E en M zitten aan nY4
 +
** Display F en N zitten aan nY5
 +
** Display G en O zitten aan nY6
 +
** Display H en P zitten aan nY7
 +
* Van de eerste demux zijn de enable-pinnen altijd actief (nE1, nE2 aan GND, E3 aan Vcc). Sturen van diens adreslijnen is dus voldoende om nCE0 van de displays te sturen. De demux zorgt voor de inversie. De 2e demux stuurt de flipflops die de LED's sturen, zie aldaar.
  
Various people hack them
+
{| class="wikitable sortable"
 +
|-
 +
! PC3 (A0) !! PC4 (A1) !! PC5 (A2) !! PC6 (CE1 bovenrijen) !! PC 7 (CE1 onderrijen) !! Display
 +
|-
 +
| X || X || X || L || L || geen
 +
|-
 +
| X || X || X || H || H || invalid (2 displays tegelijk / LED mux)
 +
|-
 +
| L || L || L || H || L || A
 +
|-
 +
| L || L || L || L || H || I
 +
|-
 +
| L || L || H || L || H || J
 +
|-
 +
| L || L || H || H || L || B
 +
|-
 +
| L || H || L || L || H || K
 +
|-
 +
| L || H || L || H || L || C
 +
|-
 +
| L || H || H || L || H || L
 +
|-
 +
| L || H || H || H || L || D
 +
|-
 +
| H || L || L || L || H || M
 +
|-
 +
| H || L || L || H || L || E
 +
|-
 +
| H || L || H || L || H || N
 +
|-
 +
| H || L || H || H || L || F
 +
|-
 +
| H || H || L || L || H || O
 +
|-
 +
| H || H || L || H || L || G
 +
|-
 +
| H || H || H || L || H || P
 +
|-
 +
| H || H || H || H || L || H
 +
|}
 +
 
 +
= reading the buttons =
 +
The 15 buttons are in a 4x4 matrix. The brightness up / down switches connect to the same pins. Every switch is between two MCU pins.
 +
 
 +
* Brightness up: between PD2 and PB3.
 +
* Brightness down: between PD4 and PD5.
 +
 
 +
{| class="wikitable"
 +
|-
 +
| row/col || '''PD2''' || '''PD3''' || '''PD4''' || '''PD5'''
 +
|-
 +
| '''PB3''' || UP || WIS || RVR || RD 06
 +
|-
 +
| '''PB2''' || 22 || 27 || 36R || 06
 +
|-
 +
| '''PB1''' || 36L || 18L || 18R || CLR
 +
|-
 +
| '''PB0''' || 4 || 3 || 2 || 1
 +
|}
 +
Text on the buttons taken from board 50.229 no 17. Might differ on other board.
 +
Top to bottom 1,2,3,4, then under 4 is CLR and left to right 18R, 18L ,36L ,06 ,36R, 27, 22, RD 06, RVR, WIS.
 +
 
 +
Read as any other keyboard matrix (? Enable pull-ups on input row/col s & unused col/row and drive one col/row low ?)
 +
 
 +
= setting the LEDs =
 +
De LED's worden aangestuurd via 74HC174 flipflops. Hiervan worden steeds de eerste 5 gebruikt, er zijn 3 IC's, zo worden 15 LED's gestuurd. De ingangen hangen aan elkaar, door middel van de kloklijn wordt gekozen welk van de 3 IC's wordt ingeklokt. Er zijn dus 5 I/O pinnen vanuit de AVR waarmee data wordt klaargezet voor de LED's. Vervolgens wordt (met andere I/O lijnen) de klok van de flipflops gestuurd 1 van de 3 groepjes van 5 te kiezen waar die data naar toe moet. Dit gaat via de tweede demux. Onderaan dit paragraafje staat een tabel welke pinnen welke LED's sturen. (Je kunt de achterliggende details dan eventueel overslaan)
 +
 
 +
(Terzijde: Is dit met het oog op toekomstige uitbreidbaarheid zo ontworpen? Er worden immers maar 3 uitgangen van de demux gebruikt om de 3 74hc174's te sturen, en de demux heeft 3 adreslijnen. Het spaart dus geen I/O - al wordt e.e.a. slim dubbel gebruikt en is het misschien daarvoor al nodig de demux ertussen te hebben).
 +
 
 +
De tweede demux is niet standaard enabled:
 +
* nE1 wordt gestuurd uit PC6 (Tevens CE1 bovenrijen) - deze pin moet dus Laag om te enablen
 +
* nE2 wordt gestuurd uit PC7 (Tevens CE1 onderrijen) - deze pin moet dus Laag om te enablen
 +
* E3 wordt gestuurd uit PC5 (Tevens A2 eerste mux). - deze pin moet dus Hoog om te enablen
  
* https://www.flickr.com/photos/okini393939/5148872258
+
De Adreslijnen van de 2e demux zijn als volgt verbonden:
* https://github.com/TiNredmc/PD443X_Lib
+
* A0 wordt gestuurd uit PC3 (Net als A0 eerste demux)
* https://github.com/TiNredmc/PD443Xclock
+
* A1 wordt gestuurd uit PC4 (Net als A1 eerste demux)
 +
* A2 wordt gestuurd uit PD6
  
== Main Board ==
+
De datalijnen van de flipflops worden als volgt gestuurd:
 +
* D0 wordt gestuurd uit PA0
 +
* D1 wordt gestuurd uit PA1
 +
* D2 wordt gestuurd uit PA2
 +
* D3 wordt gestuurd uit PA3
 +
* D4 wordt gestuurd uit PA4
  
Connection on the main bord - top row near the yellow 'TOP1' label.
 
  
Wiring / pinout main CPU board
+
De LED's worden dus als volgt aangestuurd:
  
[[Bestand:radarboard-pinout-main.jpg|400px]].
+
* Maak de adreslijnen laag om geen enkele van de klokinputs te sturen
 +
* Zet data op PA0 tot en met 4 klaar volgens onderstaande tabel
 +
* Kies gewenste 74HC174 uit onderstaande tabel
 +
* Zet de adreslijnen van de demux zodanig dat de gewenste 174 een opgaande klokflank krijgt en de data inklokt
 +
* Herhaal
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
| TOP 1 || SCK of CPU display board
+
| '''PA0''' || 1 || 18R || 27
 +
|-
 +
| '''PA1''' || 2 || 18L || 22
 +
|-
 +
| '''PA2''' || 3 || 36L || RD 06
 +
|-
 +
| '''PA3''' || 4 || 06 || RVR
 +
|-
 +
| '''PA4''' || CLR || 36R || WIS
 +
|-
 +
|  74HC174 nummer : || 0 || 1 || 2
 +
|}
 +
 
 +
Text on the buttons taken from board 50.229 no 17. Might differ on other board.
 +
Top to bottom 1,2,3,4, then under 4 is CLR and left to right 18R, 18L, 36L, 06, 36R, 27, 22, RD 06, RVR, WIS. - zie foto bovenaan.
 +
 
 +
Om de HC174 te selecteren:
 +
{| class="wikitable"
 
|-
 
|-
| TOP 2 || MISO  of CPU display board
+
! 74HC174 nummer !! PC3 !! PC4 !! PC5
 
|-
 
|-
| TOP 3 || MOSI  of CPU display board
+
| 0 || L || L || H
 
|-
 
|-
| TOP 10 || RST  of CPU display board
+
| 1 || L || H || H
 
|-
 
|-
| TOP 13,14 || TX/RX  of CPU display board
+
| 2 || H || H || H
|-
 
| BOT far left/right || Power
 
 
|-
 
|-
 +
| geen || X || X || L
 
|}
 
|}
 +
PC5 kan dus gebruikt worden om de klokflank mee te genereren (even hoog maken, laag maken, en daarna PC3 en PC4 kiezen met PC5 laag)
 +
 +
= Other things =
 +
The button caps can be very carefully disassembled to replace the text. (Print on transparant overhead sheet)
 +
</tab>
 +
 +
<!-- ********************************************************** -->
 +
<!--                                                            -->
 +
<!--                      tab: board 7003-asy                  -->
 +
<!--                                                            -->
 +
<!-- ********************************************************** -->
 +
<tab name="board 7003-asy">
 +
Dit is het board met de 74xx logica via een flatcable verbonden met een displayprint met 10 groene displays. Een arduino-bibliotheek om de displays aan te sturen is [https://github.com/Lukelectro/TCC7003 hier te vinden]. De arduino-library is gebaseerd op onderstaande.
 +
 +
Aart heeft uitgezocht hoe deze displays werken. Zijn voorbeeldcode vind je in [https://gist.github.com/Lukelectro/d1b224dee37517d91bba9bf4f437b85b deze git gist].
 +
Code die daar op voortbouwt en een test-tekst over het scherm laat scrollen vind je in [https://gist.github.com/Lukelectro/f5c4d97682b9a9d57a022c0e95346002 deze andere git gist].
 +
 +
[[Bestand:7003 asy Aart.jpeg|miniatuur|Data=adress van 0-255 schrijven geeft deze weergave. Zie [https://gist.github.com/Lukelectro/d1b224dee37517d91bba9bf4f437b85b arduino voorbeeldcode.] ]]
 +
 +
Er is een aparte connector voor de voeding en een connector voor data. Voeding is ook opgenomen in de data-connector maar vanwege spanningsval over lange/dunne draden is het beter de aparte voedingsconnector te gebruiken.
 +
 +
Omschrijving van de werking, uit de mail van Aart:
 +
----
 +
De 373 latch maakt dat data en adres op 1 bus kunnen.
 +
Men zet de latch open, plaatst eerst het adres op de bus, zet de latch vast door LE hoog te maken, plaatst dan de data en geeft een !WR.
 +
Jumper ST1 is een hardware adres van de module dat uit twee !EN lijnen selecteert.
 +
Jumper ST2 is een adres van de module dat enabled als het achtste adresbit naar keuze hoog of laag is.
 +
 +
Qua logica zitten de databits via buffer U11 doorverbonden aan het display en latch U12. Deze stuurt vervolgens de display adres bits, kolom selectie (odd/even) en rij-encoder U14.
 +
De EN en !EN van U14 worden gebruikt om de module te enabelen via de jumpers. Latch signalen van U14 en U12 zijn gelijk.
 +
U13 is een inverterende octal buffer, de buffertjes worden los gebruikt voor het bufferen van !WR, LE en het maken van de module enable signalen.
 +
Alle bus lijnen hebben 4k7 pullup- en serieweerstanden in de vorm van weerstand netwerkjes.
 +
 +
De module trekt zonder sturing, dat is met alle leds aan, een kleine 5W en wordt dan onaangenaam heet.
 +
Bij normaal gebruik daalt dit tot een kwart.
 +
----
 +
</tab>
 +
</tabs>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
= Datasheet displays =
 +
50228 and 50229 use PD44x (PD4435, red) displays. 50.028 and 50219 use DLO3416 (red). 50227 uses DLO1414 (smaller 4-digit display, red). 7003-assy uses PD2473 (green) (PD44x datasheet).
 +
 +
[[Bestand:PD-series-displays-datahsheet.pdf|340px|PD44x]]
 +
[[:Bestand:PD-series-displays-datahsheet.pdf|PD44x]]<br>
 +
Code in https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol/blob/main/shared/pd44.c
 +
 +
[[Bestand:0900766b808b01d8.pdf|340px|DLx3416]]
 +
[[:Bestand:0900766b808b01d8.pdf|DLx3416]]<br>
 +
[[Bestand:DLX1414series.pdf|340px|DLx1414]]
 +
[[:Bestand:DLX1414series.pdf|DLx1414]]<br>
 +
[[:Bestand:PD2573.pdf|PD2573]]
 +
 +
Various people hack them
 +
 +
* https://www.flickr.com/photos/okini393939/5148872258
 +
* https://github.com/TiNredmc/PD443X_Lib
 +
* https://github.com/TiNredmc/PD443Xclock
 +
 +
= Requirements for development =
 +
 +
In general an AVR compiler, baseline libc and a programmer is needed.
 +
 +
You will need an AVR programmer. A simple one like [[https://www.tinytronics.nl/shop/nl/communicatie-en-signalen/usb/usbasp-usb-avr-programmer-met-flatcable USBasp]] should do. It has been tested against an [[https://www.amazon.nl/DollaTek-compatibele-AVR-programmeerer-systeem-programmeer-ondersteunt/dp/B07L2SYF4K/ref=asc_df_B07L2SYF4K/ SK500]].
 +
 +
For more complex interactive 'talking' to it (e.g. if you wanted to hook it up to FlightTracker, your clock or a calendar) - you will need a 5 volt tolerant [[https://www.otronic.nl/a-61052754/serieel/ch340-ttl-usb-serial-port-adapter-3-3v-5v/ USB to TTL Serial]] adaptor (or connect something like an Arduino or ESP32 to it. You may need a 3/5 volt [[https://www.tinytronics.nl/shop/nl/componenten/ic's-en-microcontrollerchips/ic's/sn74ahct125n-4-kanaals-level-converter-3.3v-naar-5v-14-pin-dip level]] [[https://www.tinytronics.nl/shop/nl/communicatie-en-signalen/level-converters/robotdyn-spi-i2c-uart-bi-directionele-logic-level-converter-4-kanaals converter]] in that case).
 +
 +
You will also need 6 'dupont' cables -- they are [[https://www.amazon.nl/gp/product/B07VCCJTXN/ref=ox_sc_act_image_1 best]] [[https://www.otronic.nl/c-5347412/draden-en-kabels/ bought]] [[https://www.tinytronics.nl/shop/nl/kabels-en-connectoren/kabels-en-adapters/prototyping-draden/dupont-compatible-en-jumper/dupont-jumper-draad-male-female-20cm-10-draden in bulk]].
 +
 +
== Requirements Apple MacOSX ==
 +
 +
When using ports install:
 +
 +
    sudo port instal avr-gcc avr-libc avrdude
 +
 +
Also install '''avr-binutils''' and '''avr-gdb''' if you want to do debugging.
 +
 +
== Requirements Linux ==
 +
 +
In general something like
 +
 +
    sudo apt-get update
 +
    sudo apt-get install avr-libc binutils-avr gcc-avr avrdude
 +
 +
should do.
 +
 +
== Requirements Windows ==
 +
 +
The canonical tool is [[https://www.microchip.com/en-us/development-tools-tools-and-software/microchip-studio-for-avr-and-sam-devices AVR Studio]] and the process is explained on [[https://microchipsupport.force.com/s/article/How-to-program-an-AVR-Microcontroller this page]].
 +
 +
That said [[https://platformio.org/platforms/atmelavr PlatformIO with AVR]] seems to be becoming the popular choice nowadays. See this [[https://docs.platformio.org/en/latest/platforms/atmelavr.html starter documentation]].
  
Progamming cable ATMEL [[Bestand:atmel-isp-pinout.png|180px]] to which this needs to be connected.
+
     
 +
      [env:schiphol]
 +
      platform = atmelavr
 +
      # board = atmega161
 +
      board_build.mcu = atmega161
 +
      board_build.f_cpu = 8000000
 +
      upload_protocol = custom
 +
      upload_port = usb
 +
      #        $(AVRDUDE) $(AVRDUDEFLAGS) $(AVRDUDECONF) -c avrispmkII -p m161 -U flash:w:$<:i
 +
      upload_flags =
 +
          -C
 +
          $PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf
 +
          -p
 +
      m161
 +
          -c
 +
          avrispmkII
 +
      upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i

Huidige versie van 27 jul 2024 om 13:19

display in use (top left hand corner)

We got a [pile of Control Tower displays from Schiphol airport (or Eurocontrol, etc)] used for tracking what is in the air.

They are basically small 2-3 CPU boards on a common RS 485 bus or on RS 232. One CPU is purely for programming. The other is the main board and handles the traffic on the bus (it may be ASTERIX format?) and the other handles the display. They are interconnected by a TTL serial on 9600 8N1. Each box also contains a high quality PSU.

The programming chip is also 9600 8N1 and contains some debugging tooling. Photo below shows the testpoints used for programming.

But easiest may be to use normal ATMEL programmeing on MISO/MOSI - which are nicely broken out on the connector.

Code

Some fairly functional code: https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol

Bestand:Schiphol-first-light.mov
grote (50229) display eerste test-tekst (youtube)

Schiphol Airtraffic Control displays

Connection on the main bord - top row near the yellow 'TOP1' label. Shared by all 50XXX boards.

Wiring / pinout main CPU board

wiring for programming.

TOP 1 SCK of CPU display board
TOP 2 MISO of CPU display board
TOP 3 MOSI of CPU display board
TOP 10 RST of CPU display board
TOP 13,14 TX/RX of CPU display board
BOT far left/right Power

Progamming cable ATMEL Atmel-isp-pinout.png Atmel-isp-pinout-2.jpg to which this needs to be connected.

Dit is het board met 6 rode displays en een panduit 64-pins connector. Er zit geen "slimmigheid" (logica of mcu) op dit board. Het lijkt erg op de 50.219.

De displays op dit board zijn van het type DLO3416 datasheet. Deze hebben 6 datalijnen, een !WR lijn die aangeeft wanneer deze datalijnen gelezen moeten worden, 2 adreslijnen die aangeven welk van de 4 digits wordt aangestuurd, en 4 chip-enable lijnen die gebruikt kunnen worden om individuele displays aan te sturen. CE1 en CE2 zijn actief hoog, !CE3 en !CE4 zijn actief laag, op die manier kan door lijnen samen te nemen adressering gedaan worden.

Op het 50.028 board zitten de diverse Chip Enable lijnen dus ook aan elkaar op een manier dat adressering van de 6 individuele displays mogelijk is.

Ik reken de plek waar een "P" in de connector staat als pin 1, en tel vervolgens als volgt:

1 3 5 ... 63
2 4 ... 62 64
Pin 1 markering met een p?

De pin-out wordt dan: (Let op, nog niet gecontroleerd! Dit is met een multimeter uitgepiept maar ik heb het display nog niet aangesloten/aangestuurd). Pinnen die aan elkaar zitten hebben 1 rij in de tabel. Pinnen die niet verboden zijn, zijn weggelaten. Voor de chip-enable lijnen is een eigen tabel

pin(nen) Display-pinfunctie
1,2,3,4 5 V voeding
nc pinnen!
7,8 !CLR (van alle displays samen)
9,10 !WR (van alle displays samen)
11,12 A1 (van alle displays samen)
13,14 A0 (van alle displays samen)
15,16 Chip enable, zie andere tabel (CE2 E,B,D ; !CE4 A,C,F)
17,18 Chip enable, zie andere tabel (CE1 D ; CE2 B ; !CE3 A ; !CE4 E,B)
19,20 Chip enable, zie andere tabel (CE1 B,F ; CE2 A; !CE3 C,E ; CE4 D)
21,22 Chip enable, zie andere tabel (CE1 A,C,E ; !CE3 B,D,F)
23,24 CU (cursor select) (van alle displays samen)
25,26 CUE (Cursor select) (van alle displays samen)
27,28 D6 (van alle displays samen)
29,30 D5 (van alle displays samen)
nc pinnen!
33,34 D4 (van alle displays samen)
35,36 D3 (van alle displays samen)
37,38 D2 (van alle displays samen)
39,40 D1 (van alle displays samen)
41,42 D0 (van alle displays samen)
43 BL (blanking) F
44 BL (blanking) D
45 BL (blanking) B
46 BL (blanking) E
47 BL (blanking) C
48 BL (blanking) A
NC pinnen!
61,62,63,64 GND

Waarbij de adressering van de displays overzichtelijker te zien is als je het als volgt weergeeft:

display 15 17 19 21
A L L H H
B H L H H
C L H L H
D H H L H
E H L L H
F L H H H

De displays op de print zijn hierbij genummerd als

A B
C D
E F
nummering afzonderlijke displays en onderscheid tussen "display" en "digit"

De displays zijn dus te adresseren door middel van de adreslijnen op pinnen 15,17,19,21 (chip enable lijnen). De digits binnen een display door middel van de A0 en A1 adreslijnen.

Lijkt erg op de Board 50.028 maar bevat een potmeter om de helderheid in te stellen en wat logica. Pinout/aansturing: TODO / nog uit te zoeken.

Het "landingsbanen-display" 50226.

Het landingsbanendisplay printje.

Deze print heeft 2 voedingsspanningen nodig. De microcontroller heeft 5 V nodig. De LED's (vermoedelijk) 12 V. Let op dat er geen 12 V op de microcontroller terecht komt (hetzij voeding, hetzij I/O) ! (Dan gaan er dingen stuk)

pin-out connector

1 NC 2 NC
3 NC 4 NC
5 ? 6 ?
7 RST 8 SCK
9 MISO 10 MOSI
11 RXD0 12 TXD0
13 SS 14 Vdd (5 V)
15 Vdd (5 V) 16 VLEDs (12 V)
17 VLEDs (12 V) GND
GND GND

LET OP dat de microcontroller maximaal 5 V mag! Kijk dus uit waar de 12 V terecht komt als je met losse draadjes prototyped.

pin-out MCU

De 50226 bevat een Atmega161, en 4 stuks HEF4081 (ieder 4 2-input NAND poorten). Via een transistortje of fetje worden de LED's naar gnd geschakeld, gestuurd vanuit de uitgangen van de AND gates. De ingangen van de AND gates gaan naar de Atmega161. De 2e ingang van alle and-gates is met elkaar verbonden, en zit op pin 26 van de AVR: PE2/OC1B. Dit is een PWM uitgang. Zo kunnen de LED's gezamelijk gedimd worden (PWM uit OC1B), terwijl de LEDs elk afzonderlijk aan of uit gezet kunnen worden met elk een eigen I/O.

Er zijn ook 2 schakelaartjes. Die het dichtst bij de hoek van de print noem ik SW2 / brightness down.

In elk "wit blokje" zitten 2 LEDs. Om onderscheid te maken welke LED welke is, is het waarschijnlijk handig de namen van de start/landingsbanen aan te houden. De LEDs van een baan worden in 2 helften aangestuurd. Bij 18R/36L zijn dit 3 delen.

De namen van de banen: https://www.openstreetmap.org/#map=15/52.3131/4.7479. Let er dus op dat 18R/36L, 18L/36R en 36C/18C 3 verschillende banen zijn! (De getallen zijn kompasrichtingen, 36=360 graden. LRC zijn respectievelijk Spoelen, Weerstanden en Condensatoren, of binnen deze context vermoedelijk Left, Right en Center.)

Behalve de banen zit er nog een blokje in de hoek, in de tabel aangeduid als "Led binnenkant blokje" en "led buitenkant blokje" (mogelijk/waarschijnlijk gezien de ligging een heliport).


1 MOSI - pin 9 connector
2 MISO - pin 10 connector
3 SCK - pin 8 connector
4 RST - pin 7 connector
5 RX - pin 11 connector
6 NC
7 TX - pin 12 connector
8
9
10 PD4 led "buitenkant" (HELI?) blokje
11
12
13
14
15
16
17
18 PC0 LED baan 9/27 helft
19 PC1 LED baan 9/27 helft
20 PC2 LED baan 18L/36R, zij-helft (1/3)
21 PC3 LED baan 18L/36R, midden/3e helft (3/3)
22 PC4 LED baan 18L/36R, zij-helft (2/3)
23 PC5 LED "binnenkant" (HELI?) Blokje
24 SW1 (brightness UP)
25 SW2 (brightness DWN)
26 LED DIMMING (OC1B/PE2). Actief hoog.
27
28
29
30 PA7 LED baan 04/22 helft
31 PA6 LED baan 04/22 helft
32 PA 5 LED baan 06/24 helft
33 PA 4 ED baan 06/24 helft
34 PA3 LED baan 36C/18C helft
35 PA2 LED baan 36C/18C helft
36 PA1 LED baan 18R/36L helft (in het verlengde van "COMP SIDE")
37 PA0 LED baan 18R/36L helft (in het verlengde van "COMP SIDE")
38 VCC
39
40
41
42
43
44 SS - pin 13 connector

Datasheet-display-50227-back.jpg Datasheet-display-50227-front.jpg

Seems similar to the 50229 board, but other display type (DLO1414 vs PD4435), other MCU (atmega161 where 50229 has a '162), and more buttons.

Seems like we have just 1 of this board. It might be similar to Bestand:IMG_8958.jpeg which then would be a second one.

buttons

4 extra buttons; wired between row 0/1, row 1/2 and col 1/2, col 2/3.

display mapping

6 displays (DLO1414) - mapped per below; with from left to right in each screen '3210'.

Datasheet-display-50227-dmap.jpg

Displays zitten aangesloten volgens het voorbeeld uit de datasheet, op de 74HC138 rechtsboven de atmega161.

Display schematic 50227.

Echter, er worden meer enable-pinnen gebruikt dan in het voorbeeld schema. Zie onderstaande tabel. Tussen haakjes de namen uit de 74HC138 datasheet achter de namen uit het voorbeeldschema.

Atmega161 74hc138
pin 24 PC3 A (A0)
pin 25 PC4 B (A1)
pin 26 PC5 C (A2)
pin 27 PC6 G (E3)
pin 28 PC7 (nE1)
pin 16 PD6 nWR (nE2)

De datalijnen D0-D6 zitten op PA0-PA6 van de atmega161 (pin 39 PA0 tot pin 33 PA6). Er is bij dit type display geen D7.

reading the buttons

The 21 buttons are mostly in a 4x4 matrix. Every switch is between two MCU pins. The pins not fitting in the matrix are between 2 rows or 2 collumns.

The buttons 1, 2, 3 on the left are named 1, 2, 3 in the tables as well. The buttons labeled 1, 2, 3 on the right are labeled 1' 2' 3' as these are not in parallel with the others labeled 1, 2, 3.


row/col PD2 (C0) PD3 (C1) PD4 (C2) PD5 (C3)
PB3 (R3) 36C 2' 3 04
PB2 (R2) 24 18C 1 2
PB1 (R1) 27 36R 36L 1'
PB0 (R0) HELI 09 18L 18R

The keys that are between 2 row lines or between 2 collumn lines can be re-fitted in another matrix: (Possibly other configurations are possible and maybe even more efficient! By choosing other row/col lines in software for the same hardware)

row/col PD5 (C3) PB2 (R2) PD3 (C1) PB0 (R0)
PD4 (C2) 3' . EXEC .
PB3 (R3) . CORR . .
PB1 (R1) . 22 . 06

The keys are thus NOT the same als on 50229.

Keys in the matrix are read by setting all row/col pins to input, setting pull-ups on all collumns but leaving rows open. Then one by one set rows low and read collums.

LEDS

An identical circuit with a 74hc138 and 74hc174 seems to have been applied, as on 50229, connected to the same I/O lines. Because there are more LED's, port A5 is also used for an extra bit.

PORTA 0 downto 5 is used to load LED data into the 74HC174 flipflops, a 74HC183 is used to select which of the flipflops is put through to the leds. On 50227 there are 21 LED's. The unused last 3 inputs of the 4th flipflop are held high.

To enable the demux that is driving the flipflop clock:

  • nE1 connects to PC6 - drive LOW to enable LED's
  • nE2 connects to PC7 - drive LOW to enable LED's
  • E3 connects to PC5 - drive HIGH to enable LED's

The adress lines are as folows (This selects which one of the flipflops/registers is put trough to the leds)

  • A0 connects to PC3
  • A1 connects to PC4
  • A2 connects to PD6

The flipflop datalines:

  • D0 connects to PA0
  • D1 connects to PA1
  • D2 connects to PA2
  • D3 connects to PA3
  • D4 connects to PA4
  • D5 connects to PA5

So this is how to drive the LED's:

  • Drive all adress lines (PC3,4 & PD6) low, so none of the clock inputs is driven.
  • Put data on PA0..5 as per below table
  • Choose 74hc174 as per below table
  • Set adress lines such that the 174 gets a rising clock edge so it clocks the data to the LED's
  • repeat
PA0 18R 36R 04 CORR
PA1 18C 27 3' 3
PA2 09 2 2' EXEC
PA3 HELI 1 36C unused
PA4 1' 18C 06 unused
PA5 36L 24 22 unused
74HC174 nummer : 0 1 2 3

The "standard" display that we seem to have a lot of. Has an Atmega161.

Datasheet-display-board-both.jpg

Seems to be the reference circuit from the display datasheet with an Atmel161:

Datasheet-display-schiphol-sample.png

With an SNx4HC138 3 line to 8 line decoder/demux used. De displays zijn niet op alle borden gelijk - maar wel uit de zelfde serie en aansturing.

Boards

Datasheet-display-board.jpgDatasheet-display-display-front.jpgDatasheet-display-display-back.jpg

Main connector

1 NC 2 NC
3 NC 4 NC
5 ? 6 ?
7 RST 8 SCK
9 MISO 10 MOSI
11 RX 12 TX
13 SS 14 Vdd
15 Vdd 16 ?
17 ? GND
GND GND

Multiplexer

HC138 is een multiplexer (https://www.ti.com/lit/ds/symlink/sn74hc138.pdf?ts=1623312092250&ref_url=https%253A%252F%252Fwww.google.com%252F)

Pin 1,2,3 zijn de selects. 4,5 enables, G1 de active high

ABC worden alleen gebruikt - en schakelen het display


ATMEGA 161L

See also https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol/blob/main/50228/pins.h -- which has been tested against the actual board.

1 MOSI - pin 9 connector
2 MISO - pin 10 connector
3 SCK - pin 8 connector
4 RST - pin 7 connector
5 RX - pin 11 connector
6 NC
7 TX - pin 12 connector
8 Brightness up to ground
9 Brightness down to ground
10
11
12 pin 10 display WR
13 pin 1 display RD
14
15
16
17
18 pin 9 display A0
19 pin 8 display A1
20 pin 7 display A2
21 MCP 1 - 'A' select
22 MCP 2 - 'B' select
23 MCP 3 - 'C' select
24 pin 5 display CE1
25
26 pin 4 display RST
27
28
29
30 pin 11 display D7
31 pin 12 display D6
32 pin 13 display D5
33 pin 14 display D4
34 pin 15 display D3
35 pin 16 display D2
36 pin 17 display D1
37 pin 18 display D0
38 VCC
39
40
41
42
43
44 SS - pin 13 connector

Display

The various cards contains displays from the PD family.


Multiplexer numbering

Schiphol-mul-disp-num.png

Voorkant van 50229 nummer 17, voor de aanduidingen van de displays, schakelaars/leds etc
Achterkant van 50229 nummer 17, voor de aanduiding welk IC waar zit

Main connector

1 NC 2 NC
3 NC 4 NC
5 ? 6 ?
7 RST 8 SCK
9 MISO 10 MOSI
11 RX0 12 TX0
13 SS 14 Vdd
15 Vdd 16 ?
17 ? GND
GND GND

De main connector komt dus overeen met die van de 50228

display control

De displays op de 50229 zijn PD4435, dus dezelfde als op de 50229 maar anders dan op de 50.028. De aansturing ervan is dus ook anders. datasheet PD443 series.

De aansturing lijkt erg op het voorbeeld uit de datasheet:

Datasheet-display-schiphol-sample.png

  • nWR van de displays zitten allemaal aan elkaar en aan PD6 (pin 16) van de ATMega162.
  • RD van de displays zitten allemaal aan elkaar en aan PD7 (pin 17) van de ATMega162.
  • CLKIO van alle displays zit aan elkaar (en verder nergens aan)
  • CLKSEL van alle displays op 1 na zit aan VCC, die ene zit aan GND. Dat is het display linksboven (A).
  • nRST van alle displays zitten aan elkaar en op PE2 (pin 29) van de ATMega162
  • Alle Adreslijnen voor het selecteren van digits zitten 1 op 1 aan elkaar (A0 aan A0 van alle displays, A1 aan A1, A2 aan A2).
    • A0 zit op PC0 (Pin 21)
    • A1 zit op PC1 (Pin 22)
    • A2 zit op PC2 (Pin 23)
  • De datalijnen zitten ook 1 op 1 aan elkaar (D0 aan D0, D1 aan D1, etc) van alle displays. Ze zitten op port A (D0 op PORTA0, D1 op A1, etc tot en met D7 op PORTA7)
  • CE1 en nCE0 wordt gebruikt om te selecteren welk display wordt aangestuurd en zit iets ingewikkelder in elkaar. (Na de omschrijving welk signaal waar aan zit volgt een tabel hoe welk display aan te sturen)
    • CE1 van de bovenste 2 rijen (A tm H - zie foto) zit aan PC6 (Pin 27 AVR - gedeeld met de 2e demux, zie aansturing LED's)
    • CE1 van de onderste 2 rijen (I tm P - zie foto) zit aan PC7 (Pin 28 AVR - gedeeld met de 2e demux, zie aansturing LED's)
  • nCE0 zit steeds aan 2 displays: eentje uit de bovenhelft en eentje uit de onderhelft. Deze wordt gestuurd vanuit de 1e demux.
    • Display A en I zitten aan nY0
    • Display B en J zitten aan nY1
    • Display C en K zitten aan nY2
    • Display D en L zitten aan nY3
    • Display E en M zitten aan nY4
    • Display F en N zitten aan nY5
    • Display G en O zitten aan nY6
    • Display H en P zitten aan nY7
  • Van de eerste demux zijn de enable-pinnen altijd actief (nE1, nE2 aan GND, E3 aan Vcc). Sturen van diens adreslijnen is dus voldoende om nCE0 van de displays te sturen. De demux zorgt voor de inversie. De 2e demux stuurt de flipflops die de LED's sturen, zie aldaar.
PC3 (A0) PC4 (A1) PC5 (A2) PC6 (CE1 bovenrijen) PC 7 (CE1 onderrijen) Display
X X X L L geen
X X X H H invalid (2 displays tegelijk / LED mux)
L L L H L A
L L L L H I
L L H L H J
L L H H L B
L H L L H K
L H L H L C
L H H L H L
L H H H L D
H L L L H M
H L L H L E
H L H L H N
H L H H L F
H H L L H O
H H L H L G
H H H L H P
H H H H L H

reading the buttons

The 15 buttons are in a 4x4 matrix. The brightness up / down switches connect to the same pins. Every switch is between two MCU pins.

  • Brightness up: between PD2 and PB3.
  • Brightness down: between PD4 and PD5.
row/col PD2 PD3 PD4 PD5
PB3 UP WIS RVR RD 06
PB2 22 27 36R 06
PB1 36L 18L 18R CLR
PB0 4 3 2 1

Text on the buttons taken from board 50.229 no 17. Might differ on other board. Top to bottom 1,2,3,4, then under 4 is CLR and left to right 18R, 18L ,36L ,06 ,36R, 27, 22, RD 06, RVR, WIS.

Read as any other keyboard matrix (? Enable pull-ups on input row/col s & unused col/row and drive one col/row low ?)

setting the LEDs

De LED's worden aangestuurd via 74HC174 flipflops. Hiervan worden steeds de eerste 5 gebruikt, er zijn 3 IC's, zo worden 15 LED's gestuurd. De ingangen hangen aan elkaar, door middel van de kloklijn wordt gekozen welk van de 3 IC's wordt ingeklokt. Er zijn dus 5 I/O pinnen vanuit de AVR waarmee data wordt klaargezet voor de LED's. Vervolgens wordt (met andere I/O lijnen) de klok van de flipflops gestuurd 1 van de 3 groepjes van 5 te kiezen waar die data naar toe moet. Dit gaat via de tweede demux. Onderaan dit paragraafje staat een tabel welke pinnen welke LED's sturen. (Je kunt de achterliggende details dan eventueel overslaan)

(Terzijde: Is dit met het oog op toekomstige uitbreidbaarheid zo ontworpen? Er worden immers maar 3 uitgangen van de demux gebruikt om de 3 74hc174's te sturen, en de demux heeft 3 adreslijnen. Het spaart dus geen I/O - al wordt e.e.a. slim dubbel gebruikt en is het misschien daarvoor al nodig de demux ertussen te hebben).

De tweede demux is niet standaard enabled:

  • nE1 wordt gestuurd uit PC6 (Tevens CE1 bovenrijen) - deze pin moet dus Laag om te enablen
  • nE2 wordt gestuurd uit PC7 (Tevens CE1 onderrijen) - deze pin moet dus Laag om te enablen
  • E3 wordt gestuurd uit PC5 (Tevens A2 eerste mux). - deze pin moet dus Hoog om te enablen

De Adreslijnen van de 2e demux zijn als volgt verbonden:

  • A0 wordt gestuurd uit PC3 (Net als A0 eerste demux)
  • A1 wordt gestuurd uit PC4 (Net als A1 eerste demux)
  • A2 wordt gestuurd uit PD6

De datalijnen van de flipflops worden als volgt gestuurd:

  • D0 wordt gestuurd uit PA0
  • D1 wordt gestuurd uit PA1
  • D2 wordt gestuurd uit PA2
  • D3 wordt gestuurd uit PA3
  • D4 wordt gestuurd uit PA4


De LED's worden dus als volgt aangestuurd:

  • Maak de adreslijnen laag om geen enkele van de klokinputs te sturen
  • Zet data op PA0 tot en met 4 klaar volgens onderstaande tabel
  • Kies gewenste 74HC174 uit onderstaande tabel
  • Zet de adreslijnen van de demux zodanig dat de gewenste 174 een opgaande klokflank krijgt en de data inklokt
  • Herhaal
PA0 1 18R 27
PA1 2 18L 22
PA2 3 36L RD 06
PA3 4 06 RVR
PA4 CLR 36R WIS
74HC174 nummer : 0 1 2

Text on the buttons taken from board 50.229 no 17. Might differ on other board. Top to bottom 1,2,3,4, then under 4 is CLR and left to right 18R, 18L, 36L, 06, 36R, 27, 22, RD 06, RVR, WIS. - zie foto bovenaan.

Om de HC174 te selecteren:

74HC174 nummer PC3 PC4 PC5
0 L L H
1 L H H
2 H H H
geen X X L

PC5 kan dus gebruikt worden om de klokflank mee te genereren (even hoog maken, laag maken, en daarna PC3 en PC4 kiezen met PC5 laag)

Other things

The button caps can be very carefully disassembled to replace the text. (Print on transparant overhead sheet)

Dit is het board met de 74xx logica via een flatcable verbonden met een displayprint met 10 groene displays. Een arduino-bibliotheek om de displays aan te sturen is hier te vinden. De arduino-library is gebaseerd op onderstaande.

Aart heeft uitgezocht hoe deze displays werken. Zijn voorbeeldcode vind je in deze git gist. Code die daar op voortbouwt en een test-tekst over het scherm laat scrollen vind je in deze andere git gist.

Data=adress van 0-255 schrijven geeft deze weergave. Zie arduino voorbeeldcode.

Er is een aparte connector voor de voeding en een connector voor data. Voeding is ook opgenomen in de data-connector maar vanwege spanningsval over lange/dunne draden is het beter de aparte voedingsconnector te gebruiken.

Omschrijving van de werking, uit de mail van Aart:


De 373 latch maakt dat data en adres op 1 bus kunnen. Men zet de latch open, plaatst eerst het adres op de bus, zet de latch vast door LE hoog te maken, plaatst dan de data en geeft een !WR. Jumper ST1 is een hardware adres van de module dat uit twee !EN lijnen selecteert. Jumper ST2 is een adres van de module dat enabled als het achtste adresbit naar keuze hoog of laag is.

Qua logica zitten de databits via buffer U11 doorverbonden aan het display en latch U12. Deze stuurt vervolgens de display adres bits, kolom selectie (odd/even) en rij-encoder U14. De EN en !EN van U14 worden gebruikt om de module te enabelen via de jumpers. Latch signalen van U14 en U12 zijn gelijk. U13 is een inverterende octal buffer, de buffertjes worden los gebruikt voor het bufferen van !WR, LE en het maken van de module enable signalen. Alle bus lijnen hebben 4k7 pullup- en serieweerstanden in de vorm van weerstand netwerkjes.

De module trekt zonder sturing, dat is met alle leds aan, een kleine 5W en wordt dan onaangenaam heet. Bij normaal gebruik daalt dit tot een kwart.







Datasheet displays

50228 and 50229 use PD44x (PD4435, red) displays. 50.028 and 50219 use DLO3416 (red). 50227 uses DLO1414 (smaller 4-digit display, red). 7003-assy uses PD2473 (green) (PD44x datasheet).

PD44x PD44x
Code in https://github.com/MakerSpaceLeiden/AirtrafficControlDisplaysSchiphol/blob/main/shared/pd44.c

DLx3416 DLx3416
DLx1414 DLx1414
PD2573

Various people hack them

Requirements for development

In general an AVR compiler, baseline libc and a programmer is needed.

You will need an AVR programmer. A simple one like [USBasp] should do. It has been tested against an [SK500].

For more complex interactive 'talking' to it (e.g. if you wanted to hook it up to FlightTracker, your clock or a calendar) - you will need a 5 volt tolerant [USB to TTL Serial] adaptor (or connect something like an Arduino or ESP32 to it. You may need a 3/5 volt [level] [converter] in that case).

You will also need 6 'dupont' cables -- they are [best] [bought] [in bulk].

Requirements Apple MacOSX

When using ports install:

    sudo port instal avr-gcc avr-libc avrdude

Also install avr-binutils and avr-gdb if you want to do debugging.

Requirements Linux

In general something like

   sudo apt-get update
   sudo apt-get install avr-libc binutils-avr gcc-avr avrdude

should do.

Requirements Windows

The canonical tool is [AVR Studio] and the process is explained on [this page].

That said [PlatformIO with AVR] seems to be becoming the popular choice nowadays. See this [starter documentation].


      [env:schiphol]
      platform = atmelavr
      # board = atmega161
      board_build.mcu = atmega161
      board_build.f_cpu = 8000000
      upload_protocol = custom
      upload_port = usb
      #         $(AVRDUDE) $(AVRDUDEFLAGS) $(AVRDUDECONF) -c avrispmkII -p m161 -U flash:w:$<:i
      upload_flags =
          -C
          $PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf
          -p
      	m161
          -c
          	avrispmkII
      upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i