Elektronische Verkehrsführung mit PIC-Mikrocontrollern history menue Letztmalig dran rumgefummelt: 19.05.11 15:03:37
Um den LED-Komplex aus 12 x 12 aktiven Elementen ansteuern zu können ist es notwendig, zeitmultiplex zu arbeiten. D

1. Technische Dokumentation der verwendeten Bauelemente
2. Prinzipschaltung und Wirkungsweise des Verkehrszeichens
3. Schaltungsentwicklung
4. Software-Entwicklung
5. Verwandte Themen

Projekte mit Mikrocontrollern - also "Embedding-Systems"

programmierbare Verkehrszeichen

... ein Projekt von Christian Beneke & Anatolij Zelenin im Schuljahr 2010/2011

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Informatik-Profi-Wissen

Quellen:

1. Technische Dokumentation der verwendeten Bauelemente

Wir - Anatolij Zelenin und Christian Beneke - haben in unserem Projekt, ein programmierbares Verkehrszeichen mithilfe von unseren Kenntnissen im Bereich der Mikrocontroller zu basteln, als Hauptcontroller einen PIC 16F877A, 18 Fangregister vom Typ 74-374 und den Multiplexer K155ID3 russischen Bautyps verwendet. Des weiteren haben wir kleine LED's und viele Widerstände benutzt.
Bausteine unserer Schaltung
PIC 16F877A 74-374 K155ID3 LED und Widerstand

Der Maincontroller

Ein Fangregisterschaltplan

Der Multiplexer

Ein "Ausgangssignal" ...

...und Widerstände

 

 


2. Prinzipschaltung und Wirkungsweise des Verkehrszeichens

Im nachfolgend aufgezeigten Projekt sollen 144 LED's einer 12x12 Matrix so angesteuert werden, dass sie bestimmte Verkehrzeichen darstellen können. Die zentrale Steuerung soll ein PIC 16F877A übernehmen, bei dessen Portkonzept mit großer Vorsicht umgegangen werden muss, zumindest dann, wenn die Standardbibliotheken von JAL eingesetzt werden sollen (... und das sollen sie schließlich!). Dieser Controller steuert unseren - schon in die Jahre gekommenen - Multiplexer und speziell noch 2 weitere Fangregister an. Der Multiplexer steuert des weiteren noch die restlichen 16 Fangregister an, welche dann ihrerseits (alle 18) die 122 LED's - also 8 LED's pro Fangregister - ansteuern.
 


3. Schaltungsentwicklung

Wir haben die Schaltung in einem langem Zeitraum entwickelt und sowohl die Hälfte unserer Winterferien, viel Freizeit zu Hause und in der Schule dafür geopfert. Schlussendlich sind wir mit vielen Metern Kabeln, 144 LED's und Widerständen, 3 Platinen, 20 Kondensatoren, 20 Controllern und einigen weiteren kleineren Bauteilen fertig geworden und haben einen großen Kabelsalat fabriziert.

Die Schaltung basiert komplett auf einem Schaltplan, den wir uns vorher durchdacht und ausgetüftelt haben (Siehe erstes Bild).

Dieser Schaltplan zeigt kurz die Ansteuerung von 2 Fangregistern. Die nach unten abgehenden Signale gehen zu den restlichen 16 Fangregistern und sind alle nach demselben Prinzip aufgebaut.


4. Softwareentwicklung

Die Software mussten wir mit JAL schreiben. Dazu haben wir mit dem JAL Compiler "JAL Edit" das Programm geschrieben.

Unser Programm sieht wie folgt aus:

 

include 16f877a_bert

--Deklarationen
--PINs
--Eingänge
pin_c0_direction = Input
pin_c1_direction = Input
pin_c2_direction = Input
pin_c3_direction = Input
pin_d0_direction = Input
pin_d1_direction = Input
--Multiplexer
pin_d2_direction = Output
pin_d3_direction = Output
pin_c4_direction = Output
pin_c5_direction = Output
--Anderes
pin_d7_direction = Output
pin_d4_direction = Output
--Ausgänge
pin_a0_direction = Output
pin_b0_direction = Output
pin_b1_direction = Output
pin_b2_direction = Output
pin_b3_direction = Output
pin_b4_direction = Output
pin_b5_direction = Output
pin_b6_direction = Output
pin_b7_direction = Output


--schönere Namen
--Eingänge
var bit in0 is pin_c0
var bit in1 is pin_c1
var bit in2 is pin_c2
var bit in3 is pin_c3
var bit in4 is pin_d0
var bit instart is pin_d1

--Multiplexer
var bit multi0 is pin_d2
var bit multi1 is pin_d3
var bit multi2 is pin_c4
var bit multi3 is pin_c5

--Ausgänge
var bit out0 is pin_b0
var bit out1 is pin_b1
var bit out2 is pin_b2
var bit out3 is pin_b3
var bit out4 is pin_b4
var bit out5 is pin_b5
var bit out6 is pin_b6
var bit out7 is pin_b7

--Spezial
var bit clock is pin_d4
var bit strobe is pin_a0
var bit fang17 is pin_d7
var bit fang18 is pin_d6 -- kein Fangregister angeschlossen

var byte in_n=0
var byte out_n=0
var byte multi=1


var bit signal[144]={
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0}


;0,0,0,0,0,0,0,0,0,0,0,0,
;0,0,0,0,0,0,0,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,0,0,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,1,1,0,0,0,0,0,
;0,0,0,0,0,0,0,0,0,0,0,0}


procedure multisetter(bit in a,bit in b,bit in c,bit in d) is
multi0=a
multi1=b
multi2=c
multi3=d
-- OE aktivieren
strobe=0
-- Clock aktivieren
clock=1
--kurz warten (evtl)
delay_1ms(1)
--clock wieder runter
clock=0
-- OE wieder runter
strobe=1
end procedure

procedure setmulti is
-- var bit multi_out[4]
fang17=0
fang18=0
if multi==1 then
multisetter(0,0,0,0)
end if
if multi==9 then
multisetter(0,0,0,1)
end if
if multi==5 then
multisetter(0,0,1,0)
end if
if multi==15 then
multisetter(0,0,1,1)
end if
if multi==3 then
multisetter(0,1,0,0)
end if
if multi==11 then
multisetter(0,1,0,1)
end if
if multi==7 then
multisetter(0,1,1,0)
end if
if multi==14 then
multisetter(0,1,1,1)
end if
if multi==2 then
multisetter(1,0,0,0)
end if
if multi==10 then
multisetter(1,0,0,1)
end if
if multi==6 then
multisetter(1,0,1,0)
end if
if multi==8 then
multisetter(1,0,1,1)
end if
if multi==4 then
multisetter(1,1,0,0)
end if
if multi==16 then
multisetter(1,1,0,1)
end if
if multi==17 then
multisetter(1,1,1,0)
end if
if multi==12 then
multisetter(1,1,1,1)
end if
if multi==13 then
fang17=0
clock=1
delay_1ms(1)
clock=0
fang17=1
end if
if multi==18 then -- kein Fangregister angeschlossen
fang18=0
clock=1
delay_1ms(1)
clock=0
fang18=1
end if

if multi==18 then
multi=0
end if
multi=multi+1
end procedure

strobe=1
clock=0
fang17=1
fang18=1


out_n=0
forever loop
; out0=signal[out_n]
; out_n=out_n+1
; out1=signal[out_n]
; out_n=out_n+1
; out2=signal[out_n]
; out_n=out_n+1
; out3=signal[out_n]
; out_n=out_n+1
; out4=signal[out_n]
; out_n=out_n+1
; out5=signal[out_n]
; out_n=out_n+1
; out6=signal[out_n]
; out_n=out_n+1
; out7=signal[out_n]
; out_n=out_n+1
;
; if out_n >143 then
; out_n=0
; end if
out0=signal[0]
out1=signal[1]
out2=signal[2]
out3=signal[3]
out4=signal[4]
out5=signal[5]
out6=signal[6]
out7=signal[7]
setmulti
out0=signal[8]
out1=signal[9]
out2=signal[10]
out3=signal[11]
out4=signal[12]
out5=signal[13]
out6=signal[14]
out7=signal[15]
setmulti
out0=signal[16]
out1=signal[17]
out2=signal[18]
out3=signal[19]
out4=signal[20]
out5=signal[21]
out6=signal[22]
out7=signal[23]
setmulti
out0=signal[24]
out1=signal[25]
out2=signal[26]
out3=signal[27]
out4=signal[28]
out5=signal[29]
out6=signal[30]
out7=signal[31]
setmulti
out0=signal[32]
out1=signal[33]
out2=signal[34]
out3=signal[35]
out4=signal[36]
out5=signal[37]
out6=signal[38]
out7=signal[39]
setmulti
out0=signal[40]
out1=signal[41]
out2=signal[42]
out3=signal[43]
out4=signal[44]
out5=signal[45]
out6=signal[46]
out7=signal[47]
setmulti
out0=signal[48]
out1=signal[49]
out2=signal[50]
out3=signal[51]
out4=signal[52]
out5=signal[53]
out6=signal[54]
out7=signal[55]
setmulti
out0=signal[56]
out1=signal[57]
out2=signal[58]
out3=signal[59]
out4=signal[60]
out5=signal[61]
out6=signal[62]
out7=signal[63]
setmulti
out0=signal[64]
out1=signal[65]
out2=signal[66]
out3=signal[67]
out4=signal[68]
out5=signal[69]
out6=signal[70]
out7=signal[71]
setmulti
out0=signal[72]
out1=signal[73]
out2=signal[74]
out3=signal[75]
out4=signal[76]
out5=signal[77]
out6=signal[78]
out7=signal[79]
setmulti
out0=signal[80]
out1=signal[81]
out2=signal[82]
out3=signal[83]
out4=signal[84]
out5=signal[85]
out6=signal[86]
out7=signal[87]
setmulti
out0=signal[88]
out1=signal[89]
out2=signal[90]
out3=signal[91]
out4=signal[92]
out5=signal[93]
out6=signal[94]
out7=signal[95]
setmulti
out0=signal[96]
out1=signal[99]
out2=signal[100]
out3=signal[101]
out4=signal[102]
out5=signal[103]
out6=signal[104]
out7=signal[105]
setmulti
out0=signal[101]
out1=signal[102]
out2=signal[103]
out3=signal[104]
out4=signal[105]
out5=signal[106]
out6=signal[107]
out7=signal[108]
setmulti
out0=signal[109]
out1=signal[110]
out2=signal[111]
out3=signal[112]
out4=signal[113]
out5=signal[114]
out6=signal[115]
out7=signal[116]
setmulti
out0=signal[117]
out1=signal[118]
out2=signal[119]
out3=signal[120]
out4=signal[121]
out5=signal[122]
out6=signal[123]
out7=signal[124]
setmulti
out0=signal[125]
out1=signal[126]
out2=signal[127]
out3=signal[128]
out4=signal[129]
out5=signal[130]
out6=signal[131]
out7=signal[132]
setmulti
out0=signal[133]
out1=signal[134]
out2=signal[135]
out3=signal[136]
out4=signal[137]
out5=signal[138]
out6=signal[139]
out7=signal[140]
setmulti
out0=signal[141]
out1=signal[142]
out2=signal[143]
out3=signal[144]
out4=signal[1]
out5=signal[1]
out6=signal[1]
out7=signal[1]
setmulti
end loop

 

 


5. Verwandte Themen history menue scroll up

Was ist alles mit dem Betriebssystem eines MiKrocomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft.
 

Blinken-Paint

 

Der LC-80 Simulator

POLYCOMPUTER

Z80-CPU

Mnemonic-Code-Notation

höhere Programmierwerkzeuge

... und so funktioniert ein Computer

 

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

Alphabetisch sortierte Dokumentation

FLAG Teile I

FLAG Teile 2

Allgemeine Funktionssymbolik

Aktuelles sowie weiterentwickeltes Betriebssystem

Blockschaltbild eines Einchiprechners

   

Projekt Assemblerprogrammierung

   


zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost am 14. Februar 2011 um 7.04 Uhr

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist

Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-)