Ez a panel vezérli az egész áramkört. Tartja a kapcsolatot a számítógéppel USB-UART-on keresztül. Olvassa az SRAM tartalmát. Kezeli a triggert. Az áramkört többcélú felhasználásra terveztem, egész jól sikerült. Megtalálható rajta, ami az önálló működéshez szükséges. Az oszcilloszkópban közel 30 MIPS sebességgel üzemel. A chip hőmérséklete 50 °C.
A kvarc frekvencia választásának az volt az oka, hogy 13 éve ezeket lehetett a ChipCAD-nél kapni.
A tényleges utasítás végrehajtási sebességnek nagy szerepe van az áramkörben, ugyanis időzítések határozzák meg a mintavétel idejét, a CPLD számláló indítását és leállítását. Ezeknek az időzítéseknek a számítására egy számolótáblát készítettem. Neve ugrótábla.xls.
Az SRAM-ot nem szabad túlcímezni !!!
dsPIC panel:
Kattints a képre a nagyobb méretért!
Két kép a megvalósításról:
A PIC-ben egy Pascal nyelvű program fut. Sokat nem akarok róla beszélni. Hosszú, és sok ismétlődő részből áll. A teljes projekt letölthető.
Fő ciklus:
while (TRUE) do // Végtelen hurok
begin
if UART2_Data_Ready() = 1 then // Adat érkezik?,
begin
uart_rd := UART2_Read(); // Adat olvasás,
tr := tr + 1;
sdf[tr] := uart_rd;
as1 := sdf[1];//Mintavétel sebesség választó
as2 := sdf[2];//Trigger Felfutó=1 Lefutó=2 Nincs=0
as3 := sdf[3];//Trigger 1-9
if tr = 3 then
begin
case as1 of
1 : begin IRAS_DIV1;varakoz1;OLVAS_32768; end;
2 : begin IRAS_DIV1;varakoz10;OLVAS_4096; end;
3 : begin IRAS_DIV2;varakoz2;OLVAS_32768; end;
4 : begin IRAS_DIV2;varakoz11;OLVAS_4096; end;
5 : begin IRAS_DIV3;varakoz3;OLVAS_32768; end;
6 : begin IRAS_DIV3;varakoz12;OLVAS_4096; end;
7 : begin IRAS_DIV4;varakoz4;OLVAS_32768; end;
8 : begin IRAS_DIV4;varakoz13;OLVAS_4096; end;
9 : begin IRAS_DIV5;varakoz5;OLVAS_32768; end;
10 : begin IRAS_DIV5;varakoz14;OLVAS_4096; end;
11 : begin IRAS_DIV6;varakoz6;OLVAS_32768; end;
12 : begin IRAS_DIV6;varakoz15;OLVAS_4096; end;
13 : begin IRAS_DIV7;varakoz7;OLVAS_32768; end;
14 : begin IRAS_DIV7;varakoz16;OLVAS_4096; end;
15 : begin IRAS_DIV8;varakoz8;OLVAS_32768; end;
16 : begin IRAS_DIV8;varakoz17;OLVAS_4096; end;
17 : begin IRAS_DIV9;varakoz9;OLVAS_32768; end;
18 : begin IRAS_DIV9;varakoz18;OLVAS_4096; end;
19 : begin digpotert(as3);comp1(as2); end;
20 : begin digpotert(as3);comp2(as2); end;
21 : begin digpotert(as3);comp3(as2); end;
22 : begin digpotert(as3);comp4(as2); end;
23 : begin digpotert(as3);comp5(as2); end;
24 : begin digpotert(as3);comp6(as2); end;
25 : begin digpotert(as3);comp7(as2); end;
26 : begin digpotert(as3);comp8(as2); end;
27 : begin digpotert(as3);comp9(as2); end;
28 : begin digpotert(as3);comp10(as2); end;
29 : begin digpotert(as3);comp11(as2); end;
30 : begin digpotert(as3);comp12(as2); end;
31 : begin digpotert(as3);comp13(as2); end;
32 : begin digpotert(as3);comp14(as2); end;
33 : begin digpotert(as3);comp15(as2); end;
34 : begin digpotert(as3);comp16(as2); end;
35 : begin digpotert(as3);comp17(as2); end;
36 : begin digpotert(as3);comp18(as2); end;
end;
tr := 0;
sdf[1] := 0;
sdf[2] := 0;
sdf[3] := 0;
as1 := 0;
end;
end;
end;
Korábban már beszéltem róla, hogy három adat érkezik a számítógépes programból, amelyek as1, as2, as3 változóban tárolódnak le.
Összesen 36 alap állapot van.
Írási ciklus:
Procedure IRAS_DIV1(); //12,5MHz
begin
TRISB := %1111111111111111;//A0-A15 címző
TRISC.1 := 1; //DACLK bemenet
TRISC.2 := 1; //WE bemenet
TRISC.13 := 0; //OENG kimenet
TRISC.14 := 0; //CS1 kimenet
TRISD.9 := 0; //OEAD kimenet
LATC.14 := 0; //CS1 értéke L szint
LATC.13 := 1; //OENG értéke H
LATD.9 := 0; //OEAD értéke L szint
LATF.0 := 0; //CLKSEL(0) Az alábbi 5 sor a nullázás
LATF.1 := 0; //CLKSEL(1)
LATF.2 := 0; //CLKSEL(2)
LATF.3 := 0; //CLKSEL(3)
LATF.6 := 0; //GTS = 0
Delay_Cyc_Long(1);
LATF.6 := 1; //GTS = 1 Mintavétel indul
LATF.0 := 1; //CLKSEL(0)
LATF.1 := 0; //CLKSEL(1)
LATF.2 := 0; //CLKSEL(2)
LATF.3 := 0; //CLKSEL(3)
end;
Olvasási ciklus:
Procedure OLVAS_32768();
begin
LATF.0 := 0; //CLKSEL(0) = 0
LATF.1 := 0; //CLKSEL(1) = 0
LATF.2 := 0; //CLKSEL(2) = 0
LATF.3 := 0; //CLKSEL(3) = 0
LATF.6 := 0; //GTS1 = 0
TRISB := %0000000000000000;//A0-A15 címző kimenet
TRISC.2 := 0; //WE kimenet
TRISC.14 := 0; //CS1 kimenet
TRISC.13 := 0; //OENG kimenet
TRISD.9 := 0; //OEAD kimenet
LATC.2 := 1; //WE = 1
LATC.14 := 0; //CS1 = 0
LATC.13 := 0; //OENG = 0
LATD.9 := 1; //OEAD = 1
For J := 0 to 32767 do
begin
PORTB := J;//RAM címzés
Delay_Cyc_Long(3);
mem := PORTD and %0000000011111111;
Delay_Cyc_Long(3);
UART2_Write(mem);
Delay_us(10);
end;
end;
Trigger:
procedure comp1(as2:byte);
begin
While true do
begin
S1 := PORTD.10;
Delay_Cyc_Long(2);
S2 := PORTD.10;
if (S2>S1) and (as2=2) then //Lefutó élre, egy mintavétel, 12500000Hz
begin
IRAS_DIV1;
varakoz1;
OLVAS_32768;
as2:=0;
Break;
end;
if (S2begin
IRAS_DIV1;
varakoz1;
OLVAS_32768;
as2:=0;
Break;
end;
end;
end;
Potméter értékének a beállítása:
procedure digpotert(as3:byte);
var p1:byte;
begin
DigPot_CS_Direction := 0; //PORTG6 kimenetre állítása
p1:=ceil(31+(as3*102/9)); //2V/5V*255=102 0,6V/5V*255=31
DigPot_CS := 0; // Potmeter kiválasztása
SPI2_Write(0x11); // Írás parancs
SPI2_Write(p1); // Adat bájt küldése
DigPot_CS := 1; // Potmeter leválasztása
as3:=0;
end;
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!