##// END OF EJS Templates
Actualizacion
aaguilar -
r216:217
parent child
Show More
@@ -0,0 +1,74
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
No newline at end of file
2 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
No newline at end of file
3 <storageModule moduleId="org.eclipse.cdt.core.settings">
No newline at end of file
4 <cconfiguration id="de.innot.avreclipse.configuration.app.release.858010349">
No newline at end of file
5 <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="de.innot.avreclipse.configuration.app.release.858010349" moduleId="org.eclipse.cdt.core.settings" name="Release">
No newline at end of file
6 <externalSettings/>
No newline at end of file
7 <extensions>
No newline at end of file
8 <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
No newline at end of file
9 <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
No newline at end of file
10 <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
No newline at end of file
11 <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
No newline at end of file
12 <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
No newline at end of file
13 </extensions>
No newline at end of file
14 </storageModule>
No newline at end of file
15 <storageModule moduleId="cdtBuildSystem" version="4.0.0">
No newline at end of file
16 <configuration artifactName="${ProjName}" buildArtefactType="de.innot.avreclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=de.innot.avreclipse.buildArtefactType.app" description="" id="de.innot.avreclipse.configuration.app.release.858010349" name="Release" parent="de.innot.avreclipse.configuration.app.release">
No newline at end of file
17 <folderInfo id="de.innot.avreclipse.configuration.app.release.858010349." name="/" resourcePath="">
No newline at end of file
18 <toolChain id="de.innot.avreclipse.toolchain.winavr.app.release.1201895281" name="AVR-GCC Toolchain" superClass="de.innot.avreclipse.toolchain.winavr.app.release">
No newline at end of file
19 <option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.release.1647185864" name="Generate HEX file for Flash memory" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.release"/>
No newline at end of file
20 <option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.eeprom.app.release.1369579761" name="Generate HEX file for EEPROM" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.eeprom.app.release"/>
No newline at end of file
21 <option id="de.innot.avreclipse.toolchain.options.toolchain.objdump.app.release.83828298" name="Generate Extended Listing (Source + generated Assembler)" superClass="de.innot.avreclipse.toolchain.options.toolchain.objdump.app.release"/>
No newline at end of file
22 <option id="de.innot.avreclipse.toolchain.options.toolchain.size.app.release.684879297" name="Print Size" superClass="de.innot.avreclipse.toolchain.options.toolchain.size.app.release"/>
No newline at end of file
23 <option id="de.innot.avreclipse.toolchain.options.toolchain.avrdude.app.release.1667066990" name="AVRDude" superClass="de.innot.avreclipse.toolchain.options.toolchain.avrdude.app.release"/>
No newline at end of file
24 <targetPlatform id="de.innot.avreclipse.targetplatform.winavr.app.release.1768688297" name="AVR Cross-Target" superClass="de.innot.avreclipse.targetplatform.winavr.app.release"/>
No newline at end of file
25 <builder buildPath="${workspace_loc:/acquisitiond}/Release" id="de.innot.avreclipse.target.builder.winavr.app.release.780027386" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="AVR GNU Make Builder" superClass="de.innot.avreclipse.target.builder.winavr.app.release"/>
No newline at end of file
26 <tool id="de.innot.avreclipse.tool.assembler.winavr.app.release.2089771014" name="AVR Assembler" superClass="de.innot.avreclipse.tool.assembler.winavr.app.release">
No newline at end of file
27 <option id="de.innot.avreclipse.assembler.option.debug.level.1133662769" name="Generate Debugging Info" superClass="de.innot.avreclipse.assembler.option.debug.level" value="de.innot.avreclipse.assembler.option.debug.level.none" valueType="enumerated"/>
No newline at end of file
28 <inputType id="de.innot.avreclipse.tool.assembler.input.1279294131" superClass="de.innot.avreclipse.tool.assembler.input"/>
No newline at end of file
29 </tool>
No newline at end of file
30 <tool id="de.innot.avreclipse.tool.compiler.winavr.app.release.271082271" name="AVR Compiler" superClass="de.innot.avreclipse.tool.compiler.winavr.app.release">
No newline at end of file
31 <option id="de.innot.avreclipse.compiler.option.debug.level.565091964" name="Generate Debugging Info" superClass="de.innot.avreclipse.compiler.option.debug.level" value="de.innot.avreclipse.compiler.option.debug.level.none" valueType="enumerated"/>
No newline at end of file
32 <option id="de.innot.avreclipse.compiler.option.optimize.1018740717" name="Optimization Level" superClass="de.innot.avreclipse.compiler.option.optimize" value="de.innot.avreclipse.compiler.optimize.size" valueType="enumerated"/>
No newline at end of file
33 <inputType id="de.innot.avreclipse.compiler.winavr.input.1924568625" name="C Source Files" superClass="de.innot.avreclipse.compiler.winavr.input"/>
No newline at end of file
34 </tool>
No newline at end of file
35 <tool id="de.innot.avreclipse.tool.cppcompiler.app.release.847105960" name="AVR C++ Compiler" superClass="de.innot.avreclipse.tool.cppcompiler.app.release">
No newline at end of file
36 <option id="de.innot.avreclipse.cppcompiler.option.debug.level.954847397" name="Generate Debugging Info" superClass="de.innot.avreclipse.cppcompiler.option.debug.level" value="de.innot.avreclipse.cppcompiler.option.debug.level.none" valueType="enumerated"/>
No newline at end of file
37 <option id="de.innot.avreclipse.cppcompiler.option.optimize.1175987034" name="Optimization Level" superClass="de.innot.avreclipse.cppcompiler.option.optimize" value="de.innot.avreclipse.cppcompiler.optimize.size" valueType="enumerated"/>
No newline at end of file
38 <inputType id="de.innot.avreclipse.cppcompiler.input.242019820" superClass="de.innot.avreclipse.cppcompiler.input"/>
No newline at end of file
39 </tool>
No newline at end of file
40 <tool id="de.innot.avreclipse.tool.linker.winavr.app.release.429279474" name="AVR C Linker" superClass="de.innot.avreclipse.tool.linker.winavr.app.release"/>
No newline at end of file
41 <tool id="de.innot.avreclipse.tool.cpplinker.app.release.971097438" name="AVR C++ Linker" superClass="de.innot.avreclipse.tool.cpplinker.app.release">
No newline at end of file
42 <inputType id="de.innot.avreclipse.tool.cpplinker.input.337770889" name="OBJ Files" superClass="de.innot.avreclipse.tool.cpplinker.input">
No newline at end of file
43 <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
No newline at end of file
44 <additionalInput kind="additionalinput" paths="$(LIBS)"/>
No newline at end of file
45 </inputType>
No newline at end of file
46 </tool>
No newline at end of file
47 <tool id="de.innot.avreclipse.tool.archiver.winavr.base.750925756" name="AVR Archiver" superClass="de.innot.avreclipse.tool.archiver.winavr.base"/>
No newline at end of file
48 <tool id="de.innot.avreclipse.tool.objdump.winavr.app.release.399623506" name="AVR Create Extended Listing" superClass="de.innot.avreclipse.tool.objdump.winavr.app.release"/>
No newline at end of file
49 <tool id="de.innot.avreclipse.tool.objcopy.flash.winavr.app.release.1920455843" name="AVR Create Flash image" superClass="de.innot.avreclipse.tool.objcopy.flash.winavr.app.release"/>
No newline at end of file
50 <tool id="de.innot.avreclipse.tool.objcopy.eeprom.winavr.app.release.991951467" name="AVR Create EEPROM image" superClass="de.innot.avreclipse.tool.objcopy.eeprom.winavr.app.release"/>
No newline at end of file
51 <tool id="de.innot.avreclipse.tool.size.winavr.app.release.864443464" name="Print Size" superClass="de.innot.avreclipse.tool.size.winavr.app.release"/>
No newline at end of file
52 <tool id="de.innot.avreclipse.tool.avrdude.app.release.533373240" name="AVRDude" superClass="de.innot.avreclipse.tool.avrdude.app.release"/>
No newline at end of file
53 </toolChain>
No newline at end of file
54 </folderInfo>
No newline at end of file
55 </configuration>
No newline at end of file
56 </storageModule>
No newline at end of file
57 <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
No newline at end of file
58 </cconfiguration>
No newline at end of file
59 </storageModule>
No newline at end of file
60 <storageModule moduleId="cdtBuildSystem" version="4.0.0">
No newline at end of file
61 <project id="acquisitiond.de.innot.avreclipse.project.winavr.elf_2.1.0.1252544761" name="AVR Cross Target Application" projectType="de.innot.avreclipse.project.winavr.elf_2.1.0"/>
No newline at end of file
62 </storageModule>
No newline at end of file
63 <storageModule moduleId="scannerConfiguration">
No newline at end of file
64 <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
No newline at end of file
65 <scannerConfigBuildInfo instanceId="de.innot.avreclipse.configuration.app.release.858010349;de.innot.avreclipse.configuration.app.release.858010349.;de.innot.avreclipse.tool.cppcompiler.app.release.847105960;de.innot.avreclipse.cppcompiler.input.242019820">
No newline at end of file
66 <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="de.innot.avreclipse.core.AVRGCCManagedMakePerProjectProfileCPP"/>
No newline at end of file
67 </scannerConfigBuildInfo>
No newline at end of file
68 <scannerConfigBuildInfo instanceId="de.innot.avreclipse.configuration.app.release.858010349;de.innot.avreclipse.configuration.app.release.858010349.;de.innot.avreclipse.tool.compiler.winavr.app.release.271082271;de.innot.avreclipse.compiler.winavr.input.1924568625">
No newline at end of file
69 <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="de.innot.avreclipse.core.AVRGCCManagedMakePerProjectProfileC"/>
No newline at end of file
70 </scannerConfigBuildInfo>
No newline at end of file
71 </storageModule>
No newline at end of file
72 <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
No newline at end of file
73 <storageModule moduleId="refreshScope"/>
No newline at end of file
74 </cproject> No newline at end of file
@@ -0,0 +1,28
1 <?xml version="1.0" encoding="UTF-8"?>
No newline at end of file
2 <projectDescription>
No newline at end of file
3 <name>acquisitiond</name>
No newline at end of file
4 <comment></comment>
No newline at end of file
5 <projects>
No newline at end of file
6 </projects>
No newline at end of file
7 <buildSpec>
No newline at end of file
8 <buildCommand>
No newline at end of file
9 <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
No newline at end of file
10 <triggers>clean,full,incremental,</triggers>
No newline at end of file
11 <arguments>
No newline at end of file
12 </arguments>
No newline at end of file
13 </buildCommand>
No newline at end of file
14 <buildCommand>
No newline at end of file
15 <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
No newline at end of file
16 <triggers>full,incremental,</triggers>
No newline at end of file
17 <arguments>
No newline at end of file
18 </arguments>
No newline at end of file
19 </buildCommand>
No newline at end of file
20 </buildSpec>
No newline at end of file
21 <natures>
No newline at end of file
22 <nature>org.eclipse.cdt.core.cnature</nature>
No newline at end of file
23 <nature>org.eclipse.cdt.core.ccnature</nature>
No newline at end of file
24 <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
No newline at end of file
25 <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
No newline at end of file
26 <nature>de.innot.avreclipse.core.avrnature</nature>
No newline at end of file
27 </natures>
No newline at end of file
28 </projectDescription> No newline at end of file
@@ -0,0 +1,8
1 avrtarget/ClockFrequency=1000000
No newline at end of file
2 avrtarget/ExtRAMSize=0
No newline at end of file
3 avrtarget/ExtendedRAM=false
No newline at end of file
4 avrtarget/MCUType=atxmega32d4
No newline at end of file
5 avrtarget/UseEEPROM=false
No newline at end of file
6 avrtarget/UseExtendedRAMforHeap=true
No newline at end of file
7 avrtarget/perConfig=false
No newline at end of file
8 eclipse.preferences.version=1 No newline at end of file
@@ -0,0 +1,261
1 /*
No newline at end of file
2 * acquisitiond.c
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 24, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #include "acquisitiond.h"
No newline at end of file
9 #include "fpgaport.h"
No newline at end of file
10
No newline at end of file
11 volatile uint8_t is_acquiring = 0;
No newline at end of file
12 volatile uint8_t send_flg = 0;
No newline at end of file
13
No newline at end of file
14 // Comandos para el ADC
No newline at end of file
15 #define CMD_ACTV 0
No newline at end of file
16 #define CMD_DACTV 1
No newline at end of file
17 #define CMD_RATE 2
No newline at end of file
18 #define CMD_RPARAM 3
No newline at end of file
19 #define CMD_WPARAM 4
No newline at end of file
20 #define CMD_START 5
No newline at end of file
21 #define CMD_STOP 6
No newline at end of file
22 #define CMD_INFO 7
No newline at end of file
23 #define CMD_GAIN 8
No newline at end of file
24 #define CMD_ID 9
No newline at end of file
25 #define CMD_STATUS 10
No newline at end of file
26 #define CMD_PPS 11
No newline at end of file
27
No newline at end of file
28
No newline at end of file
29 /*!
No newline at end of file
30 * \fn acq_chn_activate
No newline at end of file
31 * \breif activa la comunicacion con el IC ADC
No newline at end of file
32 * \see acq_chn_deactivate
No newline at end of file
33 */
No newline at end of file
34 void acq_chn_activate(){
No newline at end of file
35 adcport_open();
No newline at end of file
36 }
No newline at end of file
37
No newline at end of file
38
No newline at end of file
39 /*!
No newline at end of file
40 * \fn acq_chn_deactivate
No newline at end of file
41 * \breif desactiva la comunicacion con el IC ADC
No newline at end of file
42 * \see acq_chn_activate
No newline at end of file
43 */
No newline at end of file
44 void acq_chn_deactivate(){
No newline at end of file
45 adcport_close();
No newline at end of file
46 }
No newline at end of file
47
No newline at end of file
48
No newline at end of file
49 /*!
No newline at end of file
50 * \fn acq_chn_datarate
No newline at end of file
51 * \breif Configura el datarate del ADC
No newline at end of file
52 * \param datarate El datarate deseado
No newline at end of file
53 */
No newline at end of file
54 void acq_chn_datarate(uint16_t datarate){
No newline at end of file
55 if(is_acquiring==1){
No newline at end of file
56 acq_stop_acquisiton();
No newline at end of file
57 }
No newline at end of file
58 acq_set_param_to_adc(CMD_RATE,datarate);
No newline at end of file
59 }
No newline at end of file
60
No newline at end of file
61
No newline at end of file
62 /*!
No newline at end of file
63 * \fn acq_send_information
No newline at end of file
64 * \breif Envia informacion relevante al Embebido (a traves de FPGA)
No newline at end of file
65 */
No newline at end of file
66 void acq_send_information(){
No newline at end of file
67 if(is_acquiring==1){
No newline at end of file
68 acq_stop_acquisiton();
No newline at end of file
69 }
No newline at end of file
70 acq_send_param(CMD_RATE);
No newline at end of file
71 acq_send_param(CMD_GAIN);
No newline at end of file
72 acq_send_param(CMD_ID);
No newline at end of file
73 acq_send_param(CMD_STATUS);
No newline at end of file
74 acq_send_param(CMD_PPS);
No newline at end of file
75 }
No newline at end of file
76
No newline at end of file
77
No newline at end of file
78 /*!
No newline at end of file
79 * \fn acq_chn_datarate
No newline at end of file
80 * \breif Envia parametros al embebido a traves del FPGA (este se debe encargar
No newline at end of file
81 * de hacer el puente al embebido)
No newline at end of file
82 * \param param El parametro que se quiere enviar al embebido
No newline at end of file
83 */
No newline at end of file
84 void acq_send_param(uint8_t param){
No newline at end of file
85 uint8_t data;
No newline at end of file
86 fpgaport_open();
No newline at end of file
87 fpgaport_write(param);
No newline at end of file
88 switch(param){
No newline at end of file
89 case CMD_RATE:
No newline at end of file
90 // TODO secuencia de comandos para obtener el datarate del ADC
No newline at end of file
91 break;
No newline at end of file
92 case CMD_GAIN:
No newline at end of file
93 data=adcport_get_param(GAIN0);
No newline at end of file
94 break;
No newline at end of file
95 case CMD_ID:
No newline at end of file
96 data=adcport_get_param(ID);
No newline at end of file
97 break;
No newline at end of file
98 case CMD_STATUS:
No newline at end of file
99 data=adcport_get_param(STATUS);
No newline at end of file
100 break;
No newline at end of file
101 case CMD_PPS:
No newline at end of file
102 break;// TODO
No newline at end of file
103 default:
No newline at end of file
104 // con esta opcion se puede leer los registros del ADC definidos en
No newline at end of file
105 // "adcpot.h" y enviarlos al embebido
No newline at end of file
106 data= adcport_get_param(param);
No newline at end of file
107 break;
No newline at end of file
108 }
No newline at end of file
109
No newline at end of file
110 fpgaport_write(data);
No newline at end of file
111 fpgaport_close();
No newline at end of file
112 }
No newline at end of file
113
No newline at end of file
114
No newline at end of file
115 /*!
No newline at end of file
116 * \fn acq_send_buff
No newline at end of file
117 * \breif Envia el contenido de un buffer de datos hacia el
No newline at end of file
118 * FPGA para que sean pre-procesados.
No newline at end of file
119 */
No newline at end of file
120 /*
No newline at end of file
121 * Esta funcion debe ser ejecutada con la señal de una interrupcion externa
No newline at end of file
122 * manejada por software, que le indicara que hay un buffer lleno listo
No newline at end of file
123 * para pre-procesar (vea adcport.c ).
No newline at end of file
124 */
No newline at end of file
125 void acq_send_buff(){
No newline at end of file
126 uint8_t i=0;
No newline at end of file
127 uint32_t* pbuff = adcport_getbuff();
No newline at end of file
128 fpgaport_open();
No newline at end of file
129 while(!(i==BUFF_SIZE)){
No newline at end of file
130 fpgaport_write(pbuff[i]);
No newline at end of file
131 i++;
No newline at end of file
132 }
No newline at end of file
133 fpgaport_close();
No newline at end of file
134 }
No newline at end of file
135
No newline at end of file
136
No newline at end of file
137 /*!
No newline at end of file
138 * \fn acq_chn_set_datarate
No newline at end of file
139 * \breif configura edl datarate del ADC
No newline at end of file
140 * \param datarate
No newline at end of file
141 */
No newline at end of file
142 void acq_chn_set_datarate(uint8_t datarate){
No newline at end of file
143 // TODO secuencia de comandos para configurar el data rate
No newline at end of file
144 }
No newline at end of file
145
No newline at end of file
146
No newline at end of file
147 /*!
No newline at end of file
148 * \fn acq_process_cmd
No newline at end of file
149 * \breif Procesa todos los comandos enviados desde el FPGA.
No newline at end of file
150 * \param cmd Comando a procesar.
No newline at end of file
151 */
No newline at end of file
152 /*
No newline at end of file
153 * Esta funcion debe ejecutarse al haber una interrupcion en el puerto que
No newline at end of file
154 * conecta al FPGA
No newline at end of file
155 */
No newline at end of file
156 void acq_process_cmd(uint8_t cmd){
No newline at end of file
157 static uint8_t param;
No newline at end of file
158 static uint8_t data;
No newline at end of file
159 cli();// desactiva interrupciones
No newline at end of file
160 fpgaport_open();
No newline at end of file
161 switch(cmd){
No newline at end of file
162 case CMD_ACTV: acq_chn_activate();
No newline at end of file
163 break;
No newline at end of file
164 case CMD_DACTV:acq_chn_deactivate();
No newline at end of file
165 break;
No newline at end of file
166 case CMD_RATE:
No newline at end of file
167 param=fpgaport_read();
No newline at end of file
168 acq_chn_set_datarate(param);
No newline at end of file
169 break;
No newline at end of file
170 case CMD_RPARAM:
No newline at end of file
171 param=fpgaport_read();
No newline at end of file
172 acq_send_param(param);
No newline at end of file
173 break;
No newline at end of file
174 case CMD_WPARAM:
No newline at end of file
175 cmd=fpgaport_read();//lee
No newline at end of file
176 data=fpgaport_read();//lee valor
No newline at end of file
177 acq_set_param_to_adc(cmd,data);
No newline at end of file
178 break;
No newline at end of file
179 case CMD_START:
No newline at end of file
180 acq_start_acquisition();
No newline at end of file
181 break;
No newline at end of file
182 case CMD_STOP:
No newline at end of file
183 acq_stop_acquisition();
No newline at end of file
184 break;
No newline at end of file
185 case CMD_INFO:
No newline at end of file
186 acq_send_information();
No newline at end of file
187 break;
No newline at end of file
188 default: break;
No newline at end of file
189 }
No newline at end of file
190 fpgaport_close();
No newline at end of file
191 sei();//acvtiva interrupciones
No newline at end of file
192 }
No newline at end of file
193
No newline at end of file
194
No newline at end of file
195 /*!
No newline at end of file
196 * \fn acq_set_param
No newline at end of file
197 * \breif Procesa todos los comandos enviados desde el FPGA.
No newline at end of file
198 * \param param Parametro a configurar.
No newline at end of file
199 * \param value Valor del parametro
No newline at end of file
200 */
No newline at end of file
201 void acq_set_param(uint8_t param, uint8_t value){
No newline at end of file
202 adcport_tranceiv(param);
No newline at end of file
203 adcport_tranceiv(value);
No newline at end of file
204 }
No newline at end of file
205
No newline at end of file
206
No newline at end of file
207 /*!
No newline at end of file
208 * \fn acq_start_acquisition
No newline at end of file
209 * \breif Inicia la adquisicion de datos, esta se hara a traves de interrupciones
No newline at end of file
210 * "software" (ver adcport.c)
No newline at end of file
211 */
No newline at end of file
212 void acq_start_acquisition(){
No newline at end of file
213 is_acquiring = 1;
No newline at end of file
214 adcport_start();
No newline at end of file
215 }
No newline at end of file
216
No newline at end of file
217 /*!
No newline at end of file
218 * \fn acq_stop_acquisition
No newline at end of file
219 * \breif Para la adquisicion de datos. Las interrupciones utilizadas para
No newline at end of file
220 * este fin son desactivadas.
No newline at end of file
221 */
No newline at end of file
222 void acq_stop_acquisition(){
No newline at end of file
223 is_acquiring=0;
No newline at end of file
224 adcport_stop();
No newline at end of file
225 }
No newline at end of file
226
No newline at end of file
227
No newline at end of file
228 /*
No newline at end of file
229 * interrupcion en algun pin que no se este usdando.
No newline at end of file
230 * Interrupcion software. No puede ser PORTC_INT0_vect
No newline at end of file
231 * Se usara para le indiquen que ya hay un buffer lleno
No newline at end of file
232 * (ver adcport.c)
No newline at end of file
233 */
No newline at end of file
234 ISR(PORTx_INTx_vect){ // FIXME
No newline at end of file
235 send_flg=1;
No newline at end of file
236 }
No newline at end of file
237
No newline at end of file
238
No newline at end of file
239
No newline at end of file
240 /*
No newline at end of file
241 * interrupcion en algun pin que no se este usdando.
No newline at end of file
242 * Interrupcion software. No puede ser PORTC_INT0_vect
No newline at end of file
243 * Se usara para le indiquen que ya hay un buffer lleno
No newline at end of file
244 * (ver adcport.c)
No newline at end of file
245 */
No newline at end of file
246 ISR(PORTx_INTx_vect){ // FIXME
No newline at end of file
247 send_flg=1;
No newline at end of file
248 }
No newline at end of file
249
No newline at end of file
250 /*!
No newline at end of file
251 * \brief Espera que un buffer este lleno para enviarlo al fpga
No newline at end of file
252 */
No newline at end of file
253 int main(){
No newline at end of file
254 do{
No newline at end of file
255 if(send_flg==1){
No newline at end of file
256 send_flg=0;
No newline at end of file
257 acq_send_buff();
No newline at end of file
258 }
No newline at end of file
259 }while(1);
No newline at end of file
260 return 0;
No newline at end of file
261 } No newline at end of file
@@ -0,0 +1,35
1 /*
No newline at end of file
2 * acquisitiond.h
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 24, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #ifndef ACQUISITIOND_H_
No newline at end of file
9 #define ACQUISITIOND_H_
No newline at end of file
10
No newline at end of file
11 #include <avr/io.h>
No newline at end of file
12 #include <avr/interrupt.h>
No newline at end of file
13 #include "adcport.h"
No newline at end of file
14
No newline at end of file
15 void acq_chn_activate();
No newline at end of file
16 void acq_chn_deactivate();
No newline at end of file
17 void acq_chn_datarate(uint16_t datarate);
No newline at end of file
18
No newline at end of file
19
No newline at end of file
20 void acq_send_information();
No newline at end of file
21 void acq_send_param(uint8_t param);
No newline at end of file
22 void acq_send_buff();
No newline at end of file
23
No newline at end of file
24
No newline at end of file
25 void acq_process_cmd(uint8_t cmd);
No newline at end of file
26
No newline at end of file
27 void acq_set_param_to_adc(uint8_t cmd, uint8_t data);
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 void acq_start_acquisition();
No newline at end of file
31 void acq_stop_acquisition();
No newline at end of file
32
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 #endif /* ACQUISITIOND_H_ */ No newline at end of file
@@ -0,0 +1,266
1 /*
No newline at end of file
2 * adcport.c
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 25, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #include "adcport.h"
No newline at end of file
9 #include <avr/io.h>
No newline at end of file
10 #include <avr/interrupt.h>
No newline at end of file
11
No newline at end of file
12
No newline at end of file
13 #define SPI_SS_bm PIN4_bm /*!< \brief Bit mask para el pin SS. */
No newline at end of file
14 #define SPI_MOSI_bm PIN5_bm /*!< \brief Bit mask para el pin MOSI. */
No newline at end of file
15 #define SPI_MISO_bm PIN6_bm /*!< \brief Bit mask para el pin MISO. */
No newline at end of file
16 #define SPI_SCK_bm PIN7_bm /*!< \brief Bit mask para el pin SCK. */
No newline at end of file
17
No newline at end of file
18
No newline at end of file
19 #define SS_OFF PORTC.OUTSET=PIN4_bm;/*!< \brief Deselecciona el ADC (puerto SPI) */
No newline at end of file
20 #define SS_ON PORTC.OUTCLR=PIN4_bm;/*!< \brief Selecciona el ADC (puerto SPI) */
No newline at end of file
21
No newline at end of file
22
No newline at end of file
23 /*
No newline at end of file
24 * Al iniciar la adquisicion se debe activar la interrupcion del pin RDY a
No newline at end of file
25 * traves del PINC6 del XMEGA.
No newline at end of file
26 * Luego al leer los datos digitalizados, se debe desactivar. Al terminar
No newline at end of file
27 * se reactiva para esperar la siguiente interrupcion.
No newline at end of file
28 * Esto se debe a que el DOUT y el RDY del ADC comparten el pin. Si se dejara
No newline at end of file
29 * activa la interrupcion al leer, se generarian interrupciones e los flancos
No newline at end of file
30 * de bajada generados por la transferencia de las muestras
No newline at end of file
31 */
No newline at end of file
32 #define WAIT_DATA PORTC.INT0MASK=PIN6_bm/*!< \brief Activa interrupcion que indica dato nuevo */
No newline at end of file
33 #define GET_DATA PORTC.INT0MASK=0/*!< \brief Desactiva iterrupcion que indica dato nuevo */
No newline at end of file
34
No newline at end of file
35
No newline at end of file
36 volatile uint8_t buff_idx;
No newline at end of file
37 uint32_t * pfull_buff;
No newline at end of file
38 uint32_t * pread_buff;
No newline at end of file
39 volatile uint8_t buff_full_flg = 0;
No newline at end of file
40
No newline at end of file
41 /*!
No newline at end of file
42 * \fn adcport_ready_interrupt_config
No newline at end of file
43 * \brief configura el pin de MISO (conectado a DOUT del ADC), para que dispare
No newline at end of file
44 * una interrupcion por flanco de bajada.
No newline at end of file
45 * una vez disparada la interrupcion, se puede leer el pin; sin embargo, debe
No newline at end of file
46 * desactivarse antes de leer la interrupcion por flanco (con GET_DATA). De lo
No newline at end of file
47 * contrario se disparara la interrupcion varias veces al leer los datos, ya
No newline at end of file
48 * que ese el pin RDY y DOUT es el mismo en el ADC.
No newline at end of file
49 */
No newline at end of file
50 inline void adcport_ready_interrupt_config(){
No newline at end of file
51 // pin6: MISO(xmega) --> DOUT/RDY(ADC) => pin6 entrada
No newline at end of file
52 PORTC.DIRCLR=PIN6_bm;
No newline at end of file
53 // El ADC llevara a "low" RDY cuando la conversion de un dato haya concluido
No newline at end of file
54 // Se debe leer el dato generado luego. Se espera una interrupcion de flanco
No newline at end of file
55 // de bajada para manejar esto
No newline at end of file
56 PORTC.PIN6CTRL=PORT_ISC_FALLING_gc;
No newline at end of file
57 // Se mapea la interrupcion externa INT0 de PORTC a PINC6
No newline at end of file
58 PORTC.INT0MASK=PIN6_bm;
No newline at end of file
59 // Debido a que esta interrupcion va a manejar la adquisicion de datos, se
No newline at end of file
60 // le da maxima prioridad (nivel alto)
No newline at end of file
61 PORTC.INTCTRL=PORT_INT0LVL_HI_gc;
No newline at end of file
62 // Se habilita la atencion de interrupciones de nivel alto
No newline at end of file
63 PMIC.CTRL|= PMIC_HILVLEN_bm;
No newline at end of file
64 }
No newline at end of file
65
No newline at end of file
66
No newline at end of file
67 /*!
No newline at end of file
68 * \fn adcport_spi_config
No newline at end of file
69 * \brief configura el puerto SPI para que coincida con el requerimiento del ADC
No newline at end of file
70 * AD7178-2
No newline at end of file
71 */
No newline at end of file
72 inline void adcport_spi_config(){
No newline at end of file
73 PORTC.DIRSET = SPI_MOSI_bm | SPI_SCK_bm | SPI_SS_bm;
No newline at end of file
74 // Preescaler: clkper/2 (con clk2x). Maestro. CPOL=1,CPHA=1
No newline at end of file
75 // MSB primero
No newline at end of file
76 SPIC.CTRL = SPI_CLK2X_bm|SPI_ENABLE_bm|SPI_MASTER_bm|
No newline at end of file
77 SPI_MODE1_bm|SPI_MODE0_bm;
No newline at end of file
78 }
No newline at end of file
79
No newline at end of file
80
No newline at end of file
81 /*!
No newline at end of file
82 * \fn adcport_config
No newline at end of file
83 * \brief Configura el microcontrolador para darle servicio a la interrupcion
No newline at end of file
84 * del pin "RDY" del ADC, que reacciona con un flanco de bajada cuando se ha
No newline at end of file
85 * terminado de digitalar una muestra nueva.
No newline at end of file
86 * Tambien configura el puerto SPI que servira para comunicarse con el ADC.
No newline at end of file
87 * \see adcport_ready_interrupt_config
No newline at end of file
88 * \see adcport_spi_config
No newline at end of file
89 */
No newline at end of file
90 inline void adcport_config(){
No newline at end of file
91 adcport_ready_interrupt_config();
No newline at end of file
92 adcport_spi_config();
No newline at end of file
93 // TODO configurar ADC: datarate, ganancia, desactivar CRC, formato numerico
No newline at end of file
94 // de muestras debe ser "bipolar offset binary"(canales diferenciales).
No newline at end of file
95 }
No newline at end of file
96
No newline at end of file
97
No newline at end of file
98 /*!
No newline at end of file
99 * \fn adcport_open
No newline at end of file
100 * \brief Inicializa el buffer de entrada (para datos de 24bits del ADC) y
No newline at end of file
101 * activa la comunicacion a traves del pin "SS" del puerto SPI.
No newline at end of file
102 * \see adcport_close
No newline at end of file
103 */
No newline at end of file
104 inline void adcport_open(){
No newline at end of file
105 buff_idx=0;
No newline at end of file
106 // TODO configurar interrupcion externa PPS (pin 6)
No newline at end of file
107 // TODO configurar interrupcion externa LOCK (pin 21)
No newline at end of file
108 pfull_buff = malloc(sizeof(uint32_t)*BUFF_SIZE);
No newline at end of file
109 pread_buff = malloc(sizeof(uint32_t)*BUFF_SIZE);
No newline at end of file
110 adcport_config();
No newline at end of file
111 SS_ON;
No newline at end of file
112 }
No newline at end of file
113
No newline at end of file
114
No newline at end of file
115 /*!
No newline at end of file
116 * \fn adcport_close
No newline at end of file
117 * \brief Desactiva la comunicacion con el ADC a traves del pin "SS" del puerto
No newline at end of file
118 * SPI.
No newline at end of file
119 * \see adcport_open
No newline at end of file
120 */
No newline at end of file
121 inline void adcport_close(){
No newline at end of file
122 SS_OFF;
No newline at end of file
123 free(pfull_buff);
No newline at end of file
124 free(pread_buff);
No newline at end of file
125 }
No newline at end of file
126
No newline at end of file
127
No newline at end of file
128 /*!
No newline at end of file
129 * \fn adcport_start
No newline at end of file
130 * \brief Inicia la digitalizacion de muestras del sensor.
No newline at end of file
131 * SPI.
No newline at end of file
132 * \see adcport_stop
No newline at end of file
133 * \see adcport_open
No newline at end of file
134 * \see adcport_close
No newline at end of file
135 */
No newline at end of file
136 inline void adcport_start(){
No newline at end of file
137 // necesario para darle servicio con interrupciones al flanco de bajada
No newline at end of file
138 // del pin "RDY"
No newline at end of file
139 WAIT_DATA;
No newline at end of file
140 // TODO enviar comandos al ADC para que inicie la adquisicion.
No newline at end of file
141 }
No newline at end of file
142
No newline at end of file
143
No newline at end of file
144 /*!
No newline at end of file
145 * \fn adcport_stop
No newline at end of file
146 * \brief Pausa la digitalizacion de muestras del sensor.
No newline at end of file
147 * SPI.
No newline at end of file
148 * \see adcport_start
No newline at end of file
149 * \see adcport_open
No newline at end of file
150 * \see adcport_close
No newline at end of file
151 */
No newline at end of file
152 inline void adcport_stop(){
No newline at end of file
153 // TODO enviar comandos al ADC para que deje de adquirir.
No newline at end of file
154 // necesario para cortar el servicio interrupcion del pin "RDY"
No newline at end of file
155 GET_DATA;
No newline at end of file
156 }
No newline at end of file
157
No newline at end of file
158
No newline at end of file
159 /*!
No newline at end of file
160 * \fn adcport_tranceiv
No newline at end of file
161 * \brief Realiza la transmision y recepcion simultanea de datos entre el ADC y
No newline at end of file
162 * el microcontrolador.
No newline at end of file
163 * Incluso en para leer un dato del ADC se debe transmitir, ya que solo la
No newline at end of file
164 * transmision genera clock en el pin "sclk"
No newline at end of file
165 * \param El dato a transmitir
No newline at end of file
166 * \return El dato leido del ADC
No newline at end of file
167 */
No newline at end of file
168 inline uint8_t adcport_tranceiv(uint8_t data){
No newline at end of file
169 //
No newline at end of file
170 SPIC.DATA = data;
No newline at end of file
171
No newline at end of file
172 //Wait until transmission complete
No newline at end of file
173 while(!(SPIC.STATUS)&SPI_IF_bm);
No newline at end of file
174
No newline at end of file
175 // Return received data
No newline at end of file
176 return SPIC.DATA;
No newline at end of file
177 }
No newline at end of file
178
No newline at end of file
179
No newline at end of file
180 /*!
No newline at end of file
181 * \fn adcport_start
No newline at end of file
182 * \brief Inicia la digitalizacion de muestras del sensor.
No newline at end of file
183 * SPI.
No newline at end of file
184 * \see adcport_open
No newline at end of file
185 */
No newline at end of file
186 void adcport_read_sample(){
No newline at end of file
187 uint32_t aux;
No newline at end of file
188 GET_DATA; // desactiva interrupciones de flaco de bajada
No newline at end of file
189 // Se le indica al adc que se va a leer el registro de data.
No newline at end of file
190 adcport_tranceiv(0x44);
No newline at end of file
191 // El byte mas significativo de la variable de 32bits es cero
No newline at end of file
192 // La codificacion de los numeros es "bipolar offset binary" y
No newline at end of file
193 // la transmision es MSB first
No newline at end of file
194 aux = adcport_tranceiv(0);
No newline at end of file
195 aux = (aux<<8)|adcport_tranceiv(0);
No newline at end of file
196 aux = (aux<<8)|adcport_tranceiv(0);
No newline at end of file
197 aux = (aux<<8)|adcport_tranceiv(0);
No newline at end of file
198 pread_buff[buff_idx]=aux;
No newline at end of file
199
No newline at end of file
200 WAIT_DATA; // reactiva interrupciones de flanco de bajada
No newline at end of file
201 }
No newline at end of file
202
No newline at end of file
203
No newline at end of file
204 /*!
No newline at end of file
205 * \fn adcport_getbuff
No newline at end of file
206 * \brief Devuelve la direccion del buffer lleno
No newline at end of file
207 * \return Direccion del buffer lleno. 0 si no esta lleno aun
No newline at end of file
208 */
No newline at end of file
209 inline uint32_t* adcport_getbuff(){
No newline at end of file
210 if(buff_full_flg==1){
No newline at end of file
211 buff_full_flg=0;
No newline at end of file
212 return pfull_buff;
No newline at end of file
213 }
No newline at end of file
214 return 0;
No newline at end of file
215 }
No newline at end of file
216
No newline at end of file
217
No newline at end of file
218 uint8_t adcport_get_param(uint8_t data){
No newline at end of file
219 adcport_tranceiv(data);
No newline at end of file
220 return adcport_tranceiv(0);
No newline at end of file
221 }
No newline at end of file
222
No newline at end of file
223
No newline at end of file
224 /*!
No newline at end of file
225 * \brief interrupcion externa debe dispararse en flanco de bajada en PC6 (RDY del ADC).
No newline at end of file
226 * Cuando el ADC lleva este pin a "low", se debe leer el dato nuevo
No newline at end of file
227 */
No newline at end of file
228 ISR(PORTC_INT0_vect){
No newline at end of file
229 adcport_read_sample();
No newline at end of file
230 buff_idx++;
No newline at end of file
231 if(buff_idx>=100){
No newline at end of file
232 uint32_t* paux = pread_buff;
No newline at end of file
233 pread_buff = pfull_buff;
No newline at end of file
234 pfull_buff = paux;
No newline at end of file
235 buff_full_flg=1;
No newline at end of file
236 // TODO dar aviso al programa principal que el buffer esta lleno.
No newline at end of file
237 // Puede ser a traves de una interrupcion "externa" en un pin que no se
No newline at end of file
238 // use, para lo cual debe estar configurado como salida y para recibir
No newline at end of file
239 // interrupciones de IO.
No newline at end of file
240 // para hacer que funcione como una interrupcion software, solo escribir
No newline at end of file
241 // en ese pin un valor segun se configure la interrupcion
No newline at end of file
242 }
No newline at end of file
243 }
No newline at end of file
244
No newline at end of file
245
No newline at end of file
246 /* TODO
No newline at end of file
247 * interrupcion del LOCK del GNSS (pin numero 21 del xmega)
No newline at end of file
248 * servira para indicar que el GNSS esta sincronizado con satelites y la hora y
No newline at end of file
249 * PPS son correctos, a partir de ese momento se pueden contar los PPS y
No newline at end of file
250 * identificarlos en el header.
No newline at end of file
251 */
No newline at end of file
252 ISR(PORTx_INTx_vect){ // FIXME
No newline at end of file
253
No newline at end of file
254 }
No newline at end of file
255
No newline at end of file
256
No newline at end of file
257 /* TODO
No newline at end of file
258 * interrupcion del PPS del GNSS (pin numero 6 del xmega)
No newline at end of file
259 * servira para sincronizar la hora. Debe agregar un numero de serie entre 0 y 255
No newline at end of file
260 * a la cabecera del buffer que indentifique al PPS; y el numero de muestra que se adquirio
No newline at end of file
261 * en el momento de la llegada de esta interrupcion.
No newline at end of file
262 */
No newline at end of file
263 ISR(PORTx_INTx_vect){ // FIXME
No newline at end of file
264
No newline at end of file
265 }
No newline at end of file
266 No newline at end of file
@@ -0,0 +1,60
1 /*
No newline at end of file
2 * adcport.h
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 25, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #ifndef ADCPORT_H_
No newline at end of file
9 #define ADCPORT_H_
No newline at end of file
10
No newline at end of file
11 #include <inttypes.h>
No newline at end of file
12
No newline at end of file
13 #define BUFF_SIZE 100
No newline at end of file
14
No newline at end of file
15 /* Direcciones de registros del ADC */
No newline at end of file
16
No newline at end of file
17 #define COMMS 0x00
No newline at end of file
18 #define STATUS 0x00
No newline at end of file
19 #define ADCMODE 0x01
No newline at end of file
20 #define IFMODE 0x02
No newline at end of file
21 #define REGCHECK 0x03
No newline at end of file
22 #define DATA 0X04
No newline at end of file
23 #define GPIOCON 0x06
No newline at end of file
24 #define ID 0x07
No newline at end of file
25
No newline at end of file
26 #define CHMAP0 0x10
No newline at end of file
27 #define CHMAP1 0x11
No newline at end of file
28 #define CHMAP2 0x12
No newline at end of file
29 #define CHMAP3 0x13
No newline at end of file
30
No newline at end of file
31 #define SETUPCON0 0x20
No newline at end of file
32 #define SETUPCON1 0x21
No newline at end of file
33 #define SETUPCON2 0x22
No newline at end of file
34 #define SETUPCON3 0x23
No newline at end of file
35
No newline at end of file
36 #define FILTCON0 0x28
No newline at end of file
37 #define FILTCON1 0x29
No newline at end of file
38 #define FILTCON2 0x2A
No newline at end of file
39 #define FILTCON3 0x2B
No newline at end of file
40
No newline at end of file
41 #define OFFSET0 0x30
No newline at end of file
42 #define OFFSET1 0x31
No newline at end of file
43 #define OFFSET2 0x32
No newline at end of file
44 #define OFFSET3 0x33
No newline at end of file
45
No newline at end of file
46 #define GAIN0 0x38
No newline at end of file
47 #define GAIN1 0x39
No newline at end of file
48 #define GAIN2 0x2A
No newline at end of file
49 #define GAIN3 0x2B
No newline at end of file
50
No newline at end of file
51
No newline at end of file
52 void adcport_open();
No newline at end of file
53 void adcport_close();
No newline at end of file
54 void adcport_start();
No newline at end of file
55 void adcport_stop();
No newline at end of file
56 uint32_t* adcport_getbuff();
No newline at end of file
57 uint8_t adcport_tranceiv(uint8_t data);
No newline at end of file
58 uint8_t adcport_get_param(uint8_t data);
No newline at end of file
59
No newline at end of file
60 #endif /* ADCPORT_H_ */ No newline at end of file
@@ -0,0 +1,57
1 /*
No newline at end of file
2 * fpgaport.c
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 26, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8
No newline at end of file
9 /*!
No newline at end of file
10 * \fn fpgaport_open
No newline at end of file
11 * \brief actima la comunicacion con el FPGA
No newline at end of file
12 */
No newline at end of file
13 inline void fpgaport_open(){
No newline at end of file
14 // TODO configurar puerto pfga e interrupcion externa (pin 22)
No newline at end of file
15 // TODO configurar interrupcion externa PPS (pin 6)
No newline at end of file
16 // TODO configurar interrupcion externa LOCK (pin 21)
No newline at end of file
17 }
No newline at end of file
18
No newline at end of file
19
No newline at end of file
20 /*!
No newline at end of file
21 * \fn fpgaport_close
No newline at end of file
22 * \brief Desactiva la comunicacion con el FPGA
No newline at end of file
23 */
No newline at end of file
24 inline void fpgaport_close(){
No newline at end of file
25 // TODO configurar puerto pfga e interrupcion externa (pin 22) para
No newline at end of file
26 // clock
No newline at end of file
27 }
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 /*!
No newline at end of file
31 * \fn fpgaport_write
No newline at end of file
32 * \breif activa la comunicacion con el IC ADC
No newline at end of file
33 * \see acq_chn_deactivate
No newline at end of file
34 */
No newline at end of file
35 inline void fpgaport_write(uint8_t data){
No newline at end of file
36 // TODO
No newline at end of file
37 }
No newline at end of file
38
No newline at end of file
39
No newline at end of file
40 /*!
No newline at end of file
41 * \fn fpgaport_read
No newline at end of file
42 * \breif activa la comunicacion con el IC ADC
No newline at end of file
43 * \see acq_chn_deactivate
No newline at end of file
44 */
No newline at end of file
45 inline uint8_t fpgaport_read(){
No newline at end of file
46 // TODO
No newline at end of file
47 }
No newline at end of file
48
No newline at end of file
49
No newline at end of file
50 /*
No newline at end of file
51 * Interrupcion de dato entrante por el puerto FPGA. El pin debe ser alguno de los
No newline at end of file
52 * que estan conectatos al FPGA (el bus)
No newline at end of file
53 */
No newline at end of file
54 ISR(PORTx_INTx_vect){
No newline at end of file
55 // TODO debe idicar que se ejecute la funcion que procesa los comandos
No newline at end of file
56 // que bienen del FPGA
No newline at end of file
57 } No newline at end of file
@@ -0,0 +1,19
1 /*
No newline at end of file
2 * fpgaport.h
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 26, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #ifndef FPGAPORT_H_
No newline at end of file
9 #define FPGAPORT_H_
No newline at end of file
10
No newline at end of file
11 #include <inttypes.h>
No newline at end of file
12
No newline at end of file
13 void fpgaport_open();
No newline at end of file
14 void fpgaport_close();
No newline at end of file
15 void fpgaport_write(uint8_t data);
No newline at end of file
16 uint8_t fpgaport_read();
No newline at end of file
17
No newline at end of file
18
No newline at end of file
19 #endif /* FPGAPORT_H_ */ No newline at end of file
@@ -0,0 +1,286
1 /*
No newline at end of file
2 * powerEngine.c
No newline at end of file
3 *
No newline at end of file
4 * Created on: Mar 23, 2015
No newline at end of file
5 * Author: shinobi
No newline at end of file
6 */
No newline at end of file
7
No newline at end of file
8 #include "powerEngined.h"
No newline at end of file
9 #include "usi_i2c_slave.h"
No newline at end of file
10 #include <util/delay.h>
No newline at end of file
11 #include <avr/interrupt.h>
No newline at end of file
12
No newline at end of file
13 #define DQ_HIGH DQ_PORT |= (1<<DQ_BIT)
No newline at end of file
14 #define DQ_LOW DQ_PORT &= ~(1<<DQ_BIT)
No newline at end of file
15 #define DQ_INPUT DQ_DDR &= ~(1<<DQ_BIT)
No newline at end of file
16 #define DQ_OUTPUT DQ_DDR |= (1<<DQ_BIT)
No newline at end of file
17 #define DQ_READ ((DQ_PIN&(1<<DQ_BIT))!=0)?0x01:0x00
No newline at end of file
18
No newline at end of file
19 #define US (1000000.0/ F_CPU )
No newline at end of file
20
No newline at end of file
21
No newline at end of file
22 #define TM0_ON TCCR0B |=(0<<CS02)|(0<<CS01)|(1<<CS00)
No newline at end of file
23 #define TM0_OFF TCCR0B &= ~((1<<CS02)|(1<<CS01)|(1<<CS00))
No newline at end of file
24
No newline at end of file
25 #define TM1_ON TCCR1 |= (1<<CS13)|(1<<CS12)|(1<<CS11)|(1<<CS10)
No newline at end of file
26 #define TM1_OFF TCCR1 &= ~((1<<CS13)|(1<<CS12)|(1<<CS11)|(1<<CS10))
No newline at end of file
27
No newline at end of file
28 #define MAX_TM_CYCLES 15
No newline at end of file
29
No newline at end of file
30 volatile uint8_t presenced_flg = 0;
No newline at end of file
31 volatile uint8_t process_flg = 0;
No newline at end of file
32 volatile uint8_t tm_cycles = 0;
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 extern char* USI_Slave_register_buffer[];
No newline at end of file
36
No newline at end of file
37 /*!
No newline at end of file
38 * \fn write_0_signal
No newline at end of file
39 * \brief genera el simbolo que corresponde a '0' logico en el protocolo
No newline at end of file
40 * especificatdo en el datasheet del IC DS2438Z
No newline at end of file
41 * \see write_1_signal
No newline at end of file
42 * \see write_byte
No newline at end of file
43 */
No newline at end of file
44 void write_0_signal(){
No newline at end of file
45 DQ_LOW;
No newline at end of file
46 _delay_us(65);
No newline at end of file
47 DQ_HIGH;
No newline at end of file
48 _delay_us(1);
No newline at end of file
49 }
No newline at end of file
50
No newline at end of file
51 /*!
No newline at end of file
52 * \fn write_1_signal
No newline at end of file
53 * \brief genera el simbolo que corresponde a '1' logico en el protocolo
No newline at end of file
54 * especificatdo en el datasheet del IC DS2438Z
No newline at end of file
55 * \see write_0_signal
No newline at end of file
56 * \see write_byte
No newline at end of file
57 */
No newline at end of file
58 void write_1_signal(){
No newline at end of file
59 DQ_LOW;
No newline at end of file
60 _delay_us(10);
No newline at end of file
61 DQ_HIGH;
No newline at end of file
62 _delay_us(56);
No newline at end of file
63 }
No newline at end of file
64
No newline at end of file
65
No newline at end of file
66 /*!
No newline at end of file
67 * \fn write_byte
No newline at end of file
68 * \brief Escribe un byte por el puerto DQ
No newline at end of file
69 * \param byte El byte a escribir
No newline at end of file
70 * \see write_0_signal
No newline at end of file
71 * \see write_1_signal
No newline at end of file
72 */
No newline at end of file
73 void write_byte(uint8_t byte){
No newline at end of file
74 uint8_t mask = 0x00;
No newline at end of file
75
No newline at end of file
76 while(mask!=0){
No newline at end of file
77 if((byte&mask)!=0){
No newline at end of file
78 write_1_signal();
No newline at end of file
79 }else{
No newline at end of file
80 write_0_signal();
No newline at end of file
81 }
No newline at end of file
82 mask = (uint8_t)(mask << 1);
No newline at end of file
83 }
No newline at end of file
84 }
No newline at end of file
85
No newline at end of file
86 /*!
No newline at end of file
87 * \fn write_bytes
No newline at end of file
88 * \brief Escribe "len" bytes por el puerto DQ
No newline at end of file
89 * \param pbytes Puntero a inicio de buffer que contiene los bytes
No newline at end of file
90 * \param len >Numero de bytes a escribir
No newline at end of file
91 * \see write_byte
No newline at end of file
92 */
No newline at end of file
93 void write_bytes(uint8_t* pbytes,uint8_t len){
No newline at end of file
94 do{
No newline at end of file
95 len-=1;
No newline at end of file
96 write_byte(pbytes[len]);
No newline at end of file
97 }while(len>0);
No newline at end of file
98 }
No newline at end of file
99
No newline at end of file
100
No newline at end of file
101 /*!
No newline at end of file
102 * \fn read_signal
No newline at end of file
103 * \brief Lee un bit del puerto DQ
No newline at end of file
104 * \return '1' o '0'.
No newline at end of file
105 * \see read_byte
No newline at end of file
106 */
No newline at end of file
107 uint8_t read_signal(){
No newline at end of file
108 uint8_t bit = 0;
No newline at end of file
109
No newline at end of file
110 DQ_LOW;
No newline at end of file
111 _delay_us(2);
No newline at end of file
112 DQ_HIGH;
No newline at end of file
113
No newline at end of file
114 DQ_INPUT;
No newline at end of file
115 _delay_us(8);
No newline at end of file
116 bit = DQ_READ;
No newline at end of file
117 _delay_us(55);
No newline at end of file
118
No newline at end of file
119 DQ_OUTPUT;
No newline at end of file
120 DQ_HIGH;
No newline at end of file
121 _delay_us(1);
No newline at end of file
122
No newline at end of file
123 return bit;
No newline at end of file
124 }
No newline at end of file
125
No newline at end of file
126
No newline at end of file
127 /*!
No newline at end of file
128 * \fn read_byte
No newline at end of file
129 * \brief Lee un byte de el puerto DQ
No newline at end of file
130 * \see read_signal
No newline at end of file
131 * \see read_bytes
No newline at end of file
132 */
No newline at end of file
133 uint8_t read_byte(){
No newline at end of file
134 uint8_t shift = 0x00;
No newline at end of file
135 uint8_t byte = 0x00;
No newline at end of file
136 uint8_t bit= 0;
No newline at end of file
137 while(shift< 8){
No newline at end of file
138 bit = read_signal();
No newline at end of file
139 byte |= (bit<<shift);
No newline at end of file
140 shift++;
No newline at end of file
141 }
No newline at end of file
142 return byte;
No newline at end of file
143 }
No newline at end of file
144
No newline at end of file
145
No newline at end of file
146 /*!
No newline at end of file
147 * \fn read_bytes
No newline at end of file
148 * \brief Lee "len" bytes de el puerto DQ
No newline at end of file
149 * \param pbytes puntero a buffer, contendra los bytes leidos.
No newline at end of file
150 * \param len Numero de bytes a leer.
No newline at end of file
151 * \see read_byte
No newline at end of file
152 */
No newline at end of file
153 void read_bytes(uint8_t* pbytes, uint8_t len){
No newline at end of file
154 do{
No newline at end of file
155 len-=1;
No newline at end of file
156 pbytes[len] = read_byte();
No newline at end of file
157 }while(len>0);
No newline at end of file
158 }
No newline at end of file
159
No newline at end of file
160
No newline at end of file
161 /*!
No newline at end of file
162 * \fn initialization
No newline at end of file
163 * \brief Inicia o reinicia al IC DS2438Z
No newline at end of file
164 */
No newline at end of file
165 void initialization(){
No newline at end of file
166 TCNT0 = 0x0000;
No newline at end of file
167 presenced_flg = 0;
No newline at end of file
168 DQ_LOW;
No newline at end of file
169 _delay_us(490);
No newline at end of file
170 TM0_ON;
No newline at end of file
171 DQ_HIGH;
No newline at end of file
172 while(presenced_flg != 1){}
No newline at end of file
173 }
No newline at end of file
174
No newline at end of file
175
No newline at end of file
176 /*!
No newline at end of file
177 * \fn memory_read
No newline at end of file
178 * \brief Realiza la lectura de toda la memoria del IC DS2438Z
No newline at end of file
179 */
No newline at end of file
180 void memory_read(uint8_t* pbytes, uint8_t page_addr){
No newline at end of file
181 uint8_t crc;
No newline at end of file
182 initialization();
No newline at end of file
183 write_byte(SKIP_ROM);
No newline at end of file
184 write_byte(READ_SP);
No newline at end of file
185 write_byte(page_addr);
No newline at end of file
186 read_bytes(pbytes,8);
No newline at end of file
187 crc = read_byte();
No newline at end of file
188 initialization();
No newline at end of file
189 }
No newline at end of file
190
No newline at end of file
191 /*!
No newline at end of file
192 * \fn convert
No newline at end of file
193 * \brief Inicia la conversion ADC de los parametros desados
No newline at end of file
194 * \param cmd CONVERT_T para iniciar la conversion de temperatura. CONVERT_V
No newline at end of file
195 * para iniciar la conversion de voltaje.
No newline at end of file
196 */
No newline at end of file
197 void convert(uint8_t cmd){
No newline at end of file
198 uint8_t bit = 0;
No newline at end of file
199 initialization();
No newline at end of file
200 write_byte(SKIP_ROM);
No newline at end of file
201 write_byte(cmd);
No newline at end of file
202 do{
No newline at end of file
203 bit = read_signal();
No newline at end of file
204 }while(bit != 1);
No newline at end of file
205 initialization();
No newline at end of file
206 }
No newline at end of file
207
No newline at end of file
208 /*!
No newline at end of file
209 * \fn void send_data
No newline at end of file
210 * \brief Envia data al sistema enbebido por puerto twi
No newline at end of file
211 * \param pbytes Puntero a buffer de bytes a enviar.
No newline at end of file
212 * \param len Numero de bytes a enviar. Debe ser menor o igual a USI_SLAVE_REGISTER_COUNT.
No newline at end of file
213 */
No newline at end of file
214 void send_data(uint8_t* pbytes, uint8_t len){
No newline at end of file
215 int i;
No newline at end of file
216 for(i=0;i<USI_SLAVE_REGISTER_COUNT;i++){
No newline at end of file
217 if(i<len){
No newline at end of file
218 USI_Slave_register_buffer[i]=(char)(pbytes[i]);
No newline at end of file
219 }else{
No newline at end of file
220 USI_Slave_register_buffer[i]='\0';
No newline at end of file
221 }
No newline at end of file
222 }
No newline at end of file
223
No newline at end of file
224 }
No newline at end of file
225
No newline at end of file
226
No newline at end of file
227 //usado para cronometrar la lectura del presence pulse
No newline at end of file
228 ISR(TIM0_COMPA_vect ){
No newline at end of file
229 TM0_OFF;
No newline at end of file
230 }
No newline at end of file
231
No newline at end of file
232
No newline at end of file
233 //detecta el nivel bajo. usado para detectar el presence pulse
No newline at end of file
234 ISR(PCINT0_vect){
No newline at end of file
235 uint16_t cnt;
No newline at end of file
236 if((PINB&(1<<PINB3))==0x00){
No newline at end of file
237 if((cnt>=60*US)&&(cnt<=240*US)){
No newline at end of file
238 presenced_flg=1;
No newline at end of file
239 }
No newline at end of file
240 }
No newline at end of file
241 }
No newline at end of file
242
No newline at end of file
243
No newline at end of file
244 ISR(TIM1_COMPB_vect){
No newline at end of file
245 tm_cycles++; // cuenta de 60 segundos
No newline at end of file
246 if(tm_cycles>=MAX_TM_CYCLES){
No newline at end of file
247 process_flg = 1;
No newline at end of file
248 tm_cycles=0;
No newline at end of file
249 }
No newline at end of file
250 }
No newline at end of file
251
No newline at end of file
252
No newline at end of file
253 int main(){
No newline at end of file
254 uint8_t pbytes[8];
No newline at end of file
255 // inicializa
No newline at end of file
256 USI_I2C_Init(I2C_SLAVE_ADDR);
No newline at end of file
257 cli();
No newline at end of file
258 // interrupcion externa
No newline at end of file
259 GIMSK |= _BV(PCIE); // Turn on Pin Change interrupt
No newline at end of file
260 PCMSK |= _BV(PCINT3); // Which pins are affected by the interrupt
No newline at end of file
261 // timer0 CTC con OCRA como top. Debe interrumpir en 250us luego de
No newline at end of file
262 // TM0_ON
No newline at end of file
263 TCCR0A = (1<<COM0A1)|(1<<COM0A0)|(1<<WGM01)|(0<<WGM00);
No newline at end of file
264 TCCR0B = (0<<WGM02);
No newline at end of file
265 TM0_OFF;
No newline at end of file
266 OCR0A = (uint8_t)(250*US);
No newline at end of file
267 // timer1 CTC TOP : OCR1C ; pre-scaler 16384
No newline at end of file
268 TCCR1 = (1<<COM1A1)|(1<<COM1A0);
No newline at end of file
269 TM1_OFF;
No newline at end of file
270 OCR1A = (uint8_t)(244*US);// x 15 ciclo x 16384 (pre-scaler)
No newline at end of file
271 //Activa interrupciones de timers
No newline at end of file
272 TIMSK |= (1<<OCIE1A)|(1<<OCIE0A);
No newline at end of file
273
No newline at end of file
274 presenced_flg=0;
No newline at end of file
275 sei();
No newline at end of file
276 do{
No newline at end of file
277 process_flg = 0;
No newline at end of file
278 convert(CONV_T);
No newline at end of file
279 convert(CONV_V);
No newline at end of file
280 memory_read(pbytes,PAGE_0);
No newline at end of file
281 send_data(pbytes,8);
No newline at end of file
282 while(!(process_flg==1)){};
No newline at end of file
283 }while(1==1);
No newline at end of file
284
No newline at end of file
285 return 0;
No newline at end of file
286 } No newline at end of file
@@ -0,0 +1,349
1 /*-----------------------------------------------------*\
No newline at end of file
2 | USI I2C Slave Driver |
No newline at end of file
3 | |
No newline at end of file
4 | This library provides a robust, interrupt-driven I2C |
No newline at end of file
5 | slave implementation built on the ATTiny Universal |
No newline at end of file
6 | Serial Interface (USI) hardware. Slave operation is |
No newline at end of file
7 | implemented as a register bank, where each 'register' |
No newline at end of file
8 | is a pointer to an 8-bit variable in the main code. |
No newline at end of file
9 | This was chosen to make I2C integration transparent |
No newline at end of file
10 | to the mainline code and making I2C reads simple. |
No newline at end of file
11 | This library also works well with the Linux I2C-Tools |
No newline at end of file
12 | utilities i2cdetect, i2cget, i2cset, and i2cdump. |
No newline at end of file
13 | |
No newline at end of file
14 | Adam Honse (GitHub: CalcProgrammer1) - 7/29/2012 |
No newline at end of file
15 | -calcprogrammer1@gmail.com |
No newline at end of file
16 \*-----------------------------------------------------*/
No newline at end of file
17
No newline at end of file
18 #include "usi_i2c_slave.h"
No newline at end of file
19
No newline at end of file
20 char usi_i2c_slave_internal_address;
No newline at end of file
21 char usi_i2c_slave_address;
No newline at end of file
22 char usi_i2c_mode;
No newline at end of file
23
No newline at end of file
24 ///////////////////////////////////////////////////////////////////////////////////////////////////
No newline at end of file
25 ////USI Slave States///////////////////////////////////////////////////////////////////////////////
No newline at end of file
26 ///////////////////////////////////////////////////////////////////////////////////////////////////
No newline at end of file
27
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 // The I2C register file is stored as an array of pointers, point these to whatever your I2C registers
No newline at end of file
31 // need to read/write in your code. This abstracts the buffer and makes it easier to write directly
No newline at end of file
32 // to values in your code.
No newline at end of file
33 char* USI_Slave_register_buffer[USI_SLAVE_REGISTER_COUNT];
No newline at end of file
34 char USI_Slave_internal_address = 0;
No newline at end of file
35 char USI_Slave_internal_address_set = 0;
No newline at end of file
36
No newline at end of file
37 enum
No newline at end of file
38
No newline at end of file
39 {
No newline at end of file
40
No newline at end of file
41 USI_SLAVE_CHECK_ADDRESS,
No newline at end of file
42 USI_SLAVE_SEND_DATA,
No newline at end of file
43 USI_SLAVE_SEND_DATA_ACK_WAIT,
No newline at end of file
44 USI_SLAVE_SEND_DATA_ACK_CHECK,
No newline at end of file
45
No newline at end of file
46 USI_SLAVE_RECV_DATA_WAIT,
No newline at end of file
47
No newline at end of file
48 USI_SLAVE_RECV_DATA_ACK_SEND
No newline at end of file
49
No newline at end of file
50 } USI_I2C_Slave_State;
No newline at end of file
51
No newline at end of file
52 /////////////////////////////////////////////////
No newline at end of file
53 ////USI Register Setup Values////////////////////
No newline at end of file
54 /////////////////////////////////////////////////
No newline at end of file
55
No newline at end of file
56 #define USI_SLAVE_COUNT_ACK_USISR 0b01110000 | (0x0E << USICNT0) //Counts one clock (ACK)
No newline at end of file
57 #define USI_SLAVE_COUNT_BYTE_USISR 0b01110000 | (0x00 << USICNT0) //Counts 8 clocks (BYTE)
No newline at end of file
58 #define USI_SLAVE_CLEAR_START_USISR 0b11110000 | (0x00 << USICNT0) //Clears START flag
No newline at end of file
59 #define USI_SLAVE_SET_START_COND_USISR 0b01110000 | (0x00 << USICNT0)
No newline at end of file
60 #define USI_SLAVE_SET_START_COND_USICR 0b10101000
No newline at end of file
61 #define USI_SLAVE_STOP_DID_OCCUR_USICR 0b10111000
No newline at end of file
62 #define USI_SLAVE_STOP_NOT_OCCUR_USICR 0b11101000
No newline at end of file
63
No newline at end of file
64 /////////////////////////////////////////////////
No newline at end of file
65 ////USI Direction Macros/////////////////////////
No newline at end of file
66 /////////////////////////////////////////////////
No newline at end of file
67
No newline at end of file
68 #define USI_SET_SDA_OUTPUT() { DDR_USI |= (1 << PORT_USI_SDA); }
No newline at end of file
69 #define USI_SET_SDA_INPUT() { DDR_USI &= ~(1 << PORT_USI_SDA); }
No newline at end of file
70
No newline at end of file
71 #define USI_SET_SCL_OUTPUT() { DDR_USI |= (1 << PORT_USI_SCL); }
No newline at end of file
72 #define USI_SET_SCL_INPUT() { DDR_USI &= ~(1 << PORT_USI_SCL); }
No newline at end of file
73
No newline at end of file
74 #define USI_SET_BOTH_OUTPUT() { DDR_USI |= (1 << PORT_USI_SDA) | (1 << PORT_USI_SCL); }
No newline at end of file
75 #define USI_SET_BOTH_INPUT() { DDR_USI &= ~((1 << PORT_USI_SDA) | (1 << PORT_USI_SCL)); }
No newline at end of file
76
No newline at end of file
77 ////////////////////////////////////////////////////////////////////////////////////////////////////
No newline at end of file
78
No newline at end of file
79 void USI_I2C_Init(char address)
No newline at end of file
80 {
No newline at end of file
81 PORT_USI &= ~(1 << PORT_USI_SCL);
No newline at end of file
82 PORT_USI &= ~(1 << PORT_USI_SDA);
No newline at end of file
83
No newline at end of file
84 usi_i2c_slave_address = address;
No newline at end of file
85
No newline at end of file
86 USI_SET_BOTH_INPUT();
No newline at end of file
87
No newline at end of file
88 USICR = (1 << USISIE) | (0 << USIOIE) | (1 << USIWM1) | (0 << USIWM0) | (1 << USICS1) | (0 << USICS0) | (0 << USICLK) | (0 << USITC);
No newline at end of file
89 USISR = (1 << USISIF) | (1 << USIOIF) | (1 << USIPF) | (1 << USIDC);
No newline at end of file
90 }
No newline at end of file
91
No newline at end of file
92 /////////////////////////////////////////////////////////////////////////////////
No newline at end of file
93 // ISR USI_START_vect - USI Start Condition Detector Interrupt //
No newline at end of file
94 // //
No newline at end of file
95 // This interrupt occurs when the USI Start Condition Detector detects a //
No newline at end of file
96 // start condition. A start condition marks the beginning of an I2C //
No newline at end of file
97 // transmission and occurs when SDA has a high->low transition followed by an //
No newline at end of file
98 // SCL high->low transition. When a start condition occurs, the I2C slave //
No newline at end of file
99 // state is set to check address mode and the counter is set to wait 8 clocks //
No newline at end of file
100 // (enough for the address/rw byte to be transmitted) before overflowing and //
No newline at end of file
101 // triggering the first state table interrupt. If a stop condition occurs, //
No newline at end of file
102 // reset the start condition detector to detect the next start condition. //
No newline at end of file
103 /////////////////////////////////////////////////////////////////////////////////
No newline at end of file
104
No newline at end of file
105 ISR(USI_START_vect)
No newline at end of file
106
No newline at end of file
107 {
No newline at end of file
108
No newline at end of file
109 USI_I2C_Slave_State = USI_SLAVE_CHECK_ADDRESS;
No newline at end of file
110
No newline at end of file
111
No newline at end of file
112 USI_SET_SDA_INPUT();
No newline at end of file
113
No newline at end of file
114
No newline at end of file
115
No newline at end of file
116 // wait for SCL to go low to ensure the Start Condition has completed (the
No newline at end of file
117
No newline at end of file
118 // start detector will hold SCL low ) - if a Stop Condition arises then leave
No newline at end of file
119
No newline at end of file
120 // the interrupt to prevent waiting forever - don't use USISR to test for Stop
No newline at end of file
121
No newline at end of file
122 // Condition as in Application Note AVR312 because the Stop Condition Flag is
No newline at end of file
123
No newline at end of file
124 // going to be set from the last TWI sequence
No newline at end of file
125
No newline at end of file
126 while((PIN_USI & (1 << PIN_USI_SCL)) && !((PIN_USI & (1 << PIN_USI_SDA))));
No newline at end of file
127
No newline at end of file
128
No newline at end of file
129
No newline at end of file
130 if(!(PIN_USI & (1 << PIN_USI_SDA)))
No newline at end of file
131
No newline at end of file
132 {
No newline at end of file
133
No newline at end of file
134 // a Stop Condition did not occur
No newline at end of file
135
No newline at end of file
136 USICR = USI_SLAVE_STOP_NOT_OCCUR_USICR;
No newline at end of file
137
No newline at end of file
138 }
No newline at end of file
139
No newline at end of file
140 else
No newline at end of file
141
No newline at end of file
142 {
No newline at end of file
143 // a Stop Condition did occur
No newline at end of file
144
No newline at end of file
145 USICR = USI_SLAVE_STOP_DID_OCCUR_USICR;
No newline at end of file
146
No newline at end of file
147 }
No newline at end of file
148
No newline at end of file
149
No newline at end of file
150
No newline at end of file
151 USISR = USI_SLAVE_CLEAR_START_USISR;
No newline at end of file
152
No newline at end of file
153 }
No newline at end of file
154
No newline at end of file
155 /////////////////////////////////////////////////////////////////////////////////
No newline at end of file
156 // ISR USI_OVERFLOW_vect - USI Overflow Interrupt //
No newline at end of file
157 // //
No newline at end of file
158 // This interrupt occurs when the USI counter overflows. By setting this //
No newline at end of file
159 // counter to 8, the USI can be commanded to wait one byte length before //
No newline at end of file
160 // causing another interrupt (and thus state change). To wait for an ACK, //
No newline at end of file
161 // set the counter to 1 (actually -1, or 0x0E) it will wait one clock. //
No newline at end of file
162 // This is used to set up a state table of I2C transmission states that fits //
No newline at end of file
163 // the I2C protocol for proper transmission. //
No newline at end of file
164 /////////////////////////////////////////////////////////////////////////////////
No newline at end of file
165
No newline at end of file
166 ISR(USI_OVERFLOW_vect)
No newline at end of file
167
No newline at end of file
168 {
No newline at end of file
169 switch (USI_I2C_Slave_State)
No newline at end of file
170
No newline at end of file
171 {
No newline at end of file
172 /////////////////////////////////////////////////////////////////////////
No newline at end of file
173 // Case USI_SLAVE_CHECK_ADDRESS //
No newline at end of file
174 // //
No newline at end of file
175 // The first state after the start condition, this state checks the //
No newline at end of file
176 // received byte against the stored slave address as well as the //
No newline at end of file
177 // global transmission address of 0x00. If there is a match, the R/W //
No newline at end of file
178 // bit is checked to branch either to sending or receiving modes. //
No newline at end of file
179 // If the address was not for this device, the USI system is //
No newline at end of file
180 // re-initialized for start condition. //
No newline at end of file
181 /////////////////////////////////////////////////////////////////////////
No newline at end of file
182
No newline at end of file
183 case USI_SLAVE_CHECK_ADDRESS:
No newline at end of file
184
No newline at end of file
185
No newline at end of file
186 if((USIDR == 0) || ((USIDR >> 1) == usi_i2c_slave_address))
No newline at end of file
187
No newline at end of file
188 {
No newline at end of file
189 if (USIDR & 0x01)
No newline at end of file
190
No newline at end of file
191 {
No newline at end of file
192 USI_I2C_Slave_State = USI_SLAVE_SEND_DATA;
No newline at end of file
193
No newline at end of file
194 }
No newline at end of file
195
No newline at end of file
196 else
No newline at end of file
197
No newline at end of file
198 {
No newline at end of file
199 USI_Slave_internal_address_set = 0;
No newline at end of file
200 USI_I2C_Slave_State = USI_SLAVE_RECV_DATA_WAIT;
No newline at end of file
201
No newline at end of file
202 }
No newline at end of file
203
No newline at end of file
204 //Set USI to send ACK
No newline at end of file
205
No newline at end of file
206 USIDR = 0;
No newline at end of file
207
No newline at end of file
208 USI_SET_SDA_OUTPUT();
No newline at end of file
209
No newline at end of file
210 USISR = USI_SLAVE_COUNT_ACK_USISR;
No newline at end of file
211 }
No newline at end of file
212
No newline at end of file
213 else
No newline at end of file
214
No newline at end of file
215 {
No newline at end of file
216 //Set USI to Start Condition Mode
No newline at end of file
217
No newline at end of file
218 USICR = USI_SLAVE_SET_START_COND_USICR;
No newline at end of file
219
No newline at end of file
220 USISR = USI_SLAVE_SET_START_COND_USISR;
No newline at end of file
221 }
No newline at end of file
222
No newline at end of file
223 break;
No newline at end of file
224
No newline at end of file
225 /////////////////////////////////////////////////////////////////////////
No newline at end of file
226 // Case USI_SLAVE_SEND_DATA_ACK_WAIT //
No newline at end of file
227 // //
No newline at end of file
228 // Wait 1 clock period for the master to ACK or NACK the sent data //
No newline at end of file
229 // If master NACK's, it means that master doesn't want any more data. //
No newline at end of file
230 /////////////////////////////////////////////////////////////////////////
No newline at end of file
231 case USI_SLAVE_SEND_DATA_ACK_WAIT:
No newline at end of file
232
No newline at end of file
233 //After sending, immediately shut off PORT = 1 to prevent driving
No newline at end of file
234 //the line high (I2C should *NEVER* drive high, and could damage
No newline at end of file
235 //connected devices if operating at different voltage levels)
No newline at end of file
236 PORT_USI &= ~(1 << PORT_USI_SDA);
No newline at end of file
237
No newline at end of file
238
No newline at end of file
239 USI_I2C_Slave_State = USI_SLAVE_SEND_DATA_ACK_CHECK;
No newline at end of file
240 USI_SET_SDA_INPUT();
No newline at end of file
241 USISR = USI_SLAVE_COUNT_ACK_USISR;
No newline at end of file
242 break;
No newline at end of file
243
No newline at end of file
244 /////////////////////////////////////////////////////////////////////////
No newline at end of file
245 // Case USI_SLAVE_SEND_DATA_ACK_CHECK //
No newline at end of file
246 // //
No newline at end of file
247 // Check USIDR to see if master sent ACK or NACK. If NACK, set up //
No newline at end of file
248 // a reset to START conditions, if ACK, fall through into SEND_DATA //
No newline at end of file
249 // to continue sending data. //
No newline at end of file
250 /////////////////////////////////////////////////////////////////////////
No newline at end of file
251 case USI_SLAVE_SEND_DATA_ACK_CHECK:
No newline at end of file
252
No newline at end of file
253 if(USIDR)
No newline at end of file
254 {
No newline at end of file
255 //The master sent a NACK, indicating that it will not accept
No newline at end of file
256 //more data. Reset into START condition state
No newline at end of file
257 USICR = USI_SLAVE_SET_START_COND_USICR;
No newline at end of file
258 USISR = USI_SLAVE_SET_START_COND_USISR;
No newline at end of file
259 return;
No newline at end of file
260 }
No newline at end of file
261 //else: fall through into SEND_DATA
No newline at end of file
262
No newline at end of file
263 /////////////////////////////////////////////////////////////////////////
No newline at end of file
264 // Case USI_SLAVE_SEND_DATA //
No newline at end of file
265 // //
No newline at end of file
266 // Set USIDR to the data to be sent, then set up SDA registers to //
No newline at end of file
267 // enable data transmission in the next 8 clocks. Set to wait 8 //
No newline at end of file
268 // clocks and proceed to wait for ACK. //
No newline at end of file
269 /////////////////////////////////////////////////////////////////////////
No newline at end of file
270 case USI_SLAVE_SEND_DATA:
No newline at end of file
271
No newline at end of file
272 if(USI_Slave_internal_address <= USI_SLAVE_REGISTER_COUNT)
No newline at end of file
273 {
No newline at end of file
274 USIDR = *(USI_Slave_register_buffer[USI_Slave_internal_address]);
No newline at end of file
275 }
No newline at end of file
276 else
No newline at end of file
277 {
No newline at end of file
278 USIDR = 0x00;
No newline at end of file
279 }
No newline at end of file
280 USI_Slave_internal_address++;
No newline at end of file
281
No newline at end of file
282
No newline at end of file
283 USI_I2C_Slave_State = USI_SLAVE_SEND_DATA_ACK_WAIT;
No newline at end of file
284
No newline at end of file
285
No newline at end of file
286 //To send data, DDR for SDA must be 1 (Output) and PORT for SDA
No newline at end of file
287 //must also be 1 (line drives low on USIDR MSB = 0 or PORT = 0)
No newline at end of file
288
No newline at end of file
289 USI_SET_SDA_OUTPUT();
No newline at end of file
290 PORT_USI |= (1 << PORT_USI_SDA);
No newline at end of file
291
No newline at end of file
292 USISR = USI_SLAVE_COUNT_BYTE_USISR;
No newline at end of file
293
No newline at end of file
294 break;
No newline at end of file
295
No newline at end of file
296
No newline at end of file
297 /////////////////////////////////////////////////////////////////////////
No newline at end of file
298 // Case USI_SLAVE_RECV_DATA_WAIT //
No newline at end of file
299 // //
No newline at end of file
300 // Prepares to wait 8 clocks to receive a data byte from the master. //
No newline at end of file
301 /////////////////////////////////////////////////////////////////////////
No newline at end of file
302
No newline at end of file
303 case USI_SLAVE_RECV_DATA_WAIT:
No newline at end of file
304
No newline at end of file
305 USI_I2C_Slave_State = USI_SLAVE_RECV_DATA_ACK_SEND;
No newline at end of file
306
No newline at end of file
307 USI_SET_SDA_INPUT();
No newline at end of file
308
No newline at end of file
309 USISR = USI_SLAVE_COUNT_BYTE_USISR;
No newline at end of file
310
No newline at end of file
311 break;
No newline at end of file
312
No newline at end of file
313
No newline at end of file
314 /////////////////////////////////////////////////////////////////////////
No newline at end of file
315 // Case USI_SLAVE_RECV_DATA_ACK_SEND //
No newline at end of file
316 // //
No newline at end of file
317 // After waiting for the master to finish transmission, this reads //
No newline at end of file
318 // USIDR into either the i2c buffer or internal address, then sends //
No newline at end of file
319 // an acknowledgement to the master. //
No newline at end of file
320 /////////////////////////////////////////////////////////////////////////
No newline at end of file
321
No newline at end of file
322 case USI_SLAVE_RECV_DATA_ACK_SEND:
No newline at end of file
323
No newline at end of file
324
No newline at end of file
325
No newline at end of file
326 USI_I2C_Slave_State = USI_SLAVE_RECV_DATA_WAIT;
No newline at end of file
327
No newline at end of file
328
No newline at end of file
329 if(USI_Slave_internal_address_set == 0)
No newline at end of file
330 {
No newline at end of file
331 USI_Slave_internal_address = USIDR;
No newline at end of file
332 USI_Slave_internal_address_set = 1;
No newline at end of file
333 }
No newline at end of file
334 else if(USI_Slave_internal_address <= USI_SLAVE_REGISTER_COUNT)
No newline at end of file
335 {
No newline at end of file
336 *(USI_Slave_register_buffer[USI_Slave_internal_address]) = USIDR;
No newline at end of file
337 }
No newline at end of file
338
No newline at end of file
339 USIDR = 0;
No newline at end of file
340
No newline at end of file
341 USI_SET_SDA_OUTPUT();
No newline at end of file
342
No newline at end of file
343 USISR = USI_SLAVE_COUNT_ACK_USISR;
No newline at end of file
344
No newline at end of file
345 break;
No newline at end of file
346
No newline at end of file
347 }
No newline at end of file
348
No newline at end of file
349 } No newline at end of file
@@ -0,0 +1,39
1 /*-----------------------------------------------------*\
No newline at end of file
2 | USI I2C Slave Driver |
No newline at end of file
3 | |
No newline at end of file
4 | This library provides a robust, interrupt-driven I2C |
No newline at end of file
5 | slave implementation built on the ATTiny Universal |
No newline at end of file
6 | Serial Interface (USI) hardware. Slave operation is |
No newline at end of file
7 | implemented as a register bank, where each 'register' |
No newline at end of file
8 | is a pointer to an 8-bit variable in the main code. |
No newline at end of file
9 | This was chosen to make I2C integration transparent |
No newline at end of file
10 | to the mainline code and making I2C reads simple. |
No newline at end of file
11 | This library also works well with the Linux I2C-Tools |
No newline at end of file
12 | utilities i2cdetect, i2cget, i2cset, and i2cdump. |
No newline at end of file
13 | |
No newline at end of file
14 | Adam Honse (GitHub: CalcProgrammer1) - 7/29/2012 |
No newline at end of file
15 | -calcprogrammer1@gmail.com |
No newline at end of file
16 \*-----------------------------------------------------*/
No newline at end of file
17 #ifndef USI_I2C_SLAVE_H
No newline at end of file
18 #define USI_I2C_SLAVE_H
No newline at end of file
19
No newline at end of file
20 #include <avr/io.h>
No newline at end of file
21 #include <avr/interrupt.h>
No newline at end of file
22
No newline at end of file
23 #ifdef __AVR_ATtiny85__
No newline at end of file
24 #define DDR_USI DDRB
No newline at end of file
25 #define PORT_USI PORTB
No newline at end of file
26 #define PIN_USI PINB
No newline at end of file
27 #define PORT_USI_SDA PB0
No newline at end of file
28 #define PORT_USI_SCL PB2
No newline at end of file
29 #define PIN_USI_SDA PINB0
No newline at end of file
30 #define PIN_USI_SCL PINB2
No newline at end of file
31 #endif
No newline at end of file
32
No newline at end of file
33 #define USI_SLAVE_REGISTER_COUNT 8
No newline at end of file
34
No newline at end of file
35 //USI I2C Initialize
No newline at end of file
36 // address - If slave, this parameter is the slave address
No newline at end of file
37 void USI_I2C_Init(char address);
No newline at end of file
38
No newline at end of file
39 #endif No newline at end of file
@@ -0,0 +1,17
1 <?xml version="1.0" encoding="UTF-8"?>
No newline at end of file
2 <projectDescription>
No newline at end of file
3 <name>int_cic_simul</name>
No newline at end of file
4 <comment></comment>
No newline at end of file
5 <projects>
No newline at end of file
6 </projects>
No newline at end of file
7 <buildSpec>
No newline at end of file
8 <buildCommand>
No newline at end of file
9 <name>org.python.pydev.PyDevBuilder</name>
No newline at end of file
10 <arguments>
No newline at end of file
11 </arguments>
No newline at end of file
12 </buildCommand>
No newline at end of file
13 </buildSpec>
No newline at end of file
14 <natures>
No newline at end of file
15 <nature>org.python.pydev.pythonNature</nature>
No newline at end of file
16 </natures>
No newline at end of file
17 </projectDescription> No newline at end of file
@@ -0,0 +1,8
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
No newline at end of file
2 <?eclipse-pydev version="1.0"?><pydev_project>
No newline at end of file
3 <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
No newline at end of file
4 <path>/${PROJECT_DIR_NAME}</path>
No newline at end of file
5 </pydev_pathproperty>
No newline at end of file
6 <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
No newline at end of file
7 <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
No newline at end of file
8 </pydev_project> No newline at end of file
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
@@ -0,0 +1,131
1 '''
No newline at end of file
2 Created on Jan 6, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from primitives.wire import wire
No newline at end of file
7 from cic.integrator import integrator
No newline at end of file
8 from cic.comb import comb
No newline at end of file
9 from primitives.attenuator import atten
No newline at end of file
10
No newline at end of file
11
No newline at end of file
12 class cic_decimator(object):
No newline at end of file
13 '''
No newline at end of file
14 classdocs
No newline at end of file
15 '''
No newline at end of file
16
No newline at end of file
17 def __init__(self, clk,wire_in, wire_out, k=1, r=1, m=1):
No newline at end of file
18 '''
No newline at end of file
19 Constructor
No newline at end of file
20 '''
No newline at end of file
21 self.__clk__ = clk;
No newline at end of file
22 self.__dec__ = r;
No newline at end of file
23 self.__stages__ = k;
No newline at end of file
24 self.__dly__ = m;
No newline at end of file
25
No newline at end of file
26 self.__wire_int_in__ = wire_in;
No newline at end of file
27 self.__wire_1__ = None;
No newline at end of file
28 self.__wire_int_out__ = wire_out;
No newline at end of file
29
No newline at end of file
30 self.wires=[];
No newline at end of file
31
No newline at end of file
32 self.wires.append(wire_in);
No newline at end of file
33 self.__generate_integrator__();
No newline at end of file
34 self.__generate_comb__();
No newline at end of file
35 self.wires.append(wire_out);
No newline at end of file
36
No newline at end of file
37 self.__aux=0;
No newline at end of file
38
No newline at end of file
39
No newline at end of file
40
No newline at end of file
41 def __generate_integrator__(self):
No newline at end of file
42 wire_in = self.__wire_int_in__;
No newline at end of file
43 clk = self.__clk__;
No newline at end of file
44 for i in range(self.__stages__):
No newline at end of file
45 wire_out1 = wire();
No newline at end of file
46 wire_out2 = wire();
No newline at end of file
47 integrator(clk,wire_in,wire_out1);
No newline at end of file
48 atten( wire_out1, wire_out2 , atte=float(self.__dec__));
No newline at end of file
49 wire_in = wire_out2;
No newline at end of file
50 self.__wire_1__ = wire_out2;
No newline at end of file
51
No newline at end of file
52
No newline at end of file
53
No newline at end of file
54
No newline at end of file
55 def __generate_comb__(self):
No newline at end of file
56 wire_in = self.__wire_1__;
No newline at end of file
57 clk = self.__clk__;
No newline at end of file
58 for i in range(self.__stages__-1):
No newline at end of file
59 wire_out = wire();
No newline at end of file
60 self.wires.append(wire_out);
No newline at end of file
61 comb(clk,wire_in,wire_out,deep=self.__dec__*self.__dly__);
No newline at end of file
62 wire_in = wire_out;
No newline at end of file
63 comb(clk,wire_in,self.__wire_int_out__,deep=self.__dec__*self.__dly__);
No newline at end of file
64
No newline at end of file
65
No newline at end of file
66 if __name__=="__main__":
No newline at end of file
67 from primitives.clock import clock
No newline at end of file
68 from primitives.pin import pin
No newline at end of file
69 from primitives.pout import pout
No newline at end of file
70
No newline at end of file
71 import matplotlib.pyplot as plt
No newline at end of file
72 import numpy as np
No newline at end of file
73
No newline at end of file
74 # parametros de decimacion
No newline at end of file
75 dec = 64; # decimacion
No newline at end of file
76 stgs = 3; # numero de pares integrador-comba
No newline at end of file
77 dtsz = 2**16; # cantidad de muestras de data original
No newline at end of file
78 dtszd= dtsz/dec # cantidad de muestras de data decimada
No newline at end of file
79 Fs = 1.0;#1000.0; # frecuencia de muestreo de data original
No newline at end of file
80 Fsd = Fs/dec; # frecuencia de muestreo de data decimada
No newline at end of file
81 Ts = 1.0/Fs; # tiempo de muestreo de data original
No newline at end of file
82 Tsd = 1.0/Fsd; # tiempo de muestreo de data decimada
No newline at end of file
83 Tt = Ts*dtsz; # tiempo total
No newline at end of file
84 Fst = Fs/dtsz;
No newline at end of file
85
No newline at end of file
86 # data original (impulso)
No newline at end of file
87 sig = [0 for i in range(dtsz)];
No newline at end of file
88 sig[0] = 1;
No newline at end of file
89
No newline at end of file
90
No newline at end of file
91 tsig = [Ts*i for i in range(dtsz)];
No newline at end of file
92 freq = [Fst*i-Fs/2 for i in range(dtsz)];
No newline at end of file
93
No newline at end of file
94
No newline at end of file
95 # descripcion del circuito
No newline at end of file
96 clk = clock(); # clock maestro
No newline at end of file
97
No newline at end of file
98 sig0 = wire();
No newline at end of file
99 sig1 = wire();
No newline at end of file
100 cic = cic_decimator(clk,sig0,sig1,k=stgs,r=dec,m=1);
No newline at end of file
101
No newline at end of file
102 p_int = pin(clk,sig0);
No newline at end of file
103 p_int.set_data(sig);
No newline at end of file
104
No newline at end of file
105 p3 = pout(clk,sig0);
No newline at end of file
106 p4 = pout(clk,sig1);
No newline at end of file
107
No newline at end of file
108 for x in range(dtsz):
No newline at end of file
109 clk.tick();
No newline at end of file
110
No newline at end of file
111
No newline at end of file
112 out = np.array(p4.get_data());
No newline at end of file
113
No newline at end of file
114
No newline at end of file
115 fft_out = np.fft.fft(out);
No newline at end of file
116 fft_out = np.fft.fftshift(fft_out);
No newline at end of file
117 fft_gain = np.abs(fft_out*np.conj(fft_out))+0.000000001;
No newline at end of file
118 fft_db = 10.0*np.log10(fft_gain);
No newline at end of file
119
No newline at end of file
120
No newline at end of file
121 fig = plt.figure()
No newline at end of file
122 amp_f = fig.add_subplot(2,1,1)
No newline at end of file
123 amp_f.plot(freq,fft_db, color='blue');
No newline at end of file
124 amp_f.grid();
No newline at end of file
125 amp_t = fig.add_subplot(2,1,2)
No newline at end of file
126 amp_t.plot(tsig,out, color='blue');
No newline at end of file
127 amp_t.plot(tsig,p3.get_data(), color='red');
No newline at end of file
128 amp_t.grid();
No newline at end of file
129 plt.show();
No newline at end of file
130
No newline at end of file
131 No newline at end of file
@@ -0,0 +1,61
1 '''
No newline at end of file
2 Created on Jan 7, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.delay import delay
No newline at end of file
8 from primitives.adder import adder,NEG
No newline at end of file
9 from primitives.wire import wire
No newline at end of file
10
No newline at end of file
11
No newline at end of file
12 class comb(object):
No newline at end of file
13 '''
No newline at end of file
14 classdocs
No newline at end of file
15 '''
No newline at end of file
16
No newline at end of file
17
No newline at end of file
18 def __init__(self, clk , wire_in, wire_out, deep=1):
No newline at end of file
19 '''
No newline at end of file
20 Constructor
No newline at end of file
21 '''
No newline at end of file
22 self.__wire_in = wire_in;
No newline at end of file
23 self.__wire_out = wire_out;
No newline at end of file
24 self.__wire_1 = wire();
No newline at end of file
25
No newline at end of file
26 self.__adder = adder();
No newline at end of file
27 self.__z1 = delay(clk,self.__wire_in,self.__wire_1, deep=deep);
No newline at end of file
28 self.__clk = clk;
No newline at end of file
29
No newline at end of file
30 self.__adder.connect_to_in(self.__wire_in);
No newline at end of file
31 self.__adder.connect_to_in(self.__wire_1 , NEG);
No newline at end of file
32 self.__adder.connect_to_out(self.__wire_out);
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35
No newline at end of file
36
No newline at end of file
37 if __name__=="__main__":
No newline at end of file
38 from primitives.clock import clock
No newline at end of file
39 from primitives.pin import pin
No newline at end of file
40 from primitives.pout import pout
No newline at end of file
41
No newline at end of file
42
No newline at end of file
43 segnal = [i for i in range(30)];
No newline at end of file
44 segnal[0]=0.0;
No newline at end of file
45 clk = clock();
No newline at end of file
46 sig0 = wire();
No newline at end of file
47 sig1 = wire();
No newline at end of file
48
No newline at end of file
49 comb1 = comb(clk,sig0,sig1,deep=2);
No newline at end of file
50
No newline at end of file
51 p_int = pin(clk,sig0);
No newline at end of file
52 p_int.set_data(segnal);
No newline at end of file
53 pi = pout(clk,sig0);
No newline at end of file
54 po = pout(clk,sig1);
No newline at end of file
55
No newline at end of file
56 for sig in segnal:
No newline at end of file
57 clk.tick();
No newline at end of file
58 comb1.print_()
No newline at end of file
59
No newline at end of file
60 print pi.get_data()
No newline at end of file
61 print po.get_data() No newline at end of file
@@ -0,0 +1,113
1 '''
No newline at end of file
2 Created on Feb 10, 2015
No newline at end of file
3
No newline at end of file
4 @author: shinobi
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.wire import wire
No newline at end of file
8 from primitives.delay import delay
No newline at end of file
9 from primitives.gain import gain
No newline at end of file
10 from primitives.adder import adder
No newline at end of file
11
No newline at end of file
12 class Hc(object):
No newline at end of file
13 def __init__(self,clk,M,Kc,wire_in, wire_out):
No newline at end of file
14
No newline at end of file
15 self.__A = -2**-4;
No newline at end of file
16 self.__B = -(2**4+2);
No newline at end of file
17 self.__Kc = Kc;
No newline at end of file
18 self.__M = M;
No newline at end of file
19 self.__wire_in = wire_in;
No newline at end of file
20 self.__wire_out = wire_out;
No newline at end of file
21 self.__clk = clk;
No newline at end of file
22
No newline at end of file
23
No newline at end of file
24 for i in range(Kc-1):
No newline at end of file
25 wire_out = wire();
No newline at end of file
26 self.__generate_single_module(wire_in, wire_out);
No newline at end of file
27 wire_in = wire_out;
No newline at end of file
28 self.__generate_single_module(wire_in, self.__wire_out);
No newline at end of file
29
No newline at end of file
30
No newline at end of file
31 def __generate_single_module(self,wire_in,wire_out):
No newline at end of file
32 clk = self.__clk;
No newline at end of file
33 M = self.__M;
No newline at end of file
34 A = self.__A; B = self.__B;
No newline at end of file
35 w1 = wire();
No newline at end of file
36 w2 = wire();
No newline at end of file
37 w3 = wire();
No newline at end of file
38 w4 = wire();
No newline at end of file
39 delay(clk, wire_in, w1, deep=M);
No newline at end of file
40 delay(clk, w1, w2, deep=M);
No newline at end of file
41 gain(w1, w3, gain=B);
No newline at end of file
42 ad = adder();
No newline at end of file
43 ad.connect_to_in(wire_in);
No newline at end of file
44 ad.connect_to_in(w3);
No newline at end of file
45 ad.connect_to_in(w2);
No newline at end of file
46 ad.connect_to_out(w4);
No newline at end of file
47 gain(w4, wire_out, gain=A);
No newline at end of file
48
No newline at end of file
49 if __name__=="__main__":
No newline at end of file
50 from primitives.clock import clock
No newline at end of file
51 from primitives.pin import pin
No newline at end of file
52 from primitives.pout import pout
No newline at end of file
53 import numpy as np
No newline at end of file
54
No newline at end of file
55 import matplotlib.pyplot as plt
No newline at end of file
56
No newline at end of file
57 # parametros de decimacion
No newline at end of file
58 M1 = 2
No newline at end of file
59 M2 = 5;
No newline at end of file
60 M = M1*M2;
No newline at end of file
61 Kc = 4;
No newline at end of file
62
No newline at end of file
63 dtsz = 2**16; # cantidad de muestras de data original
No newline at end of file
64 Fs = 1000.0; # frecuencia de muestreo de data original
No newline at end of file
65 Ts = 1.0/Fs; # tiempo de muestreo de data original
No newline at end of file
66 Tt = Ts*dtsz; # tiempo total
No newline at end of file
67 Fst = Fs/dtsz;
No newline at end of file
68
No newline at end of file
69 # data original (impulso)
No newline at end of file
70 sig = [0 for i in range(dtsz)];
No newline at end of file
71 sig[0] = 1;
No newline at end of file
72
No newline at end of file
73 tsig = [Ts*i for i in range(dtsz)];
No newline at end of file
74 freq = [Fst*i-Fs/2 for i in range(dtsz)];
No newline at end of file
75
No newline at end of file
76 # descripcion del circuito
No newline at end of file
77 clk = clock(); # clock maestro
No newline at end of file
78
No newline at end of file
79 sig0 = wire();
No newline at end of file
80 sig1 = wire();
No newline at end of file
81
No newline at end of file
82 h = Hc(clk,M,Kc,sig0, sig1);
No newline at end of file
83
No newline at end of file
84 p_int = pin(clk,sig0);
No newline at end of file
85 p_int.set_data(sig);
No newline at end of file
86
No newline at end of file
87 p3 = pout(clk,sig0);
No newline at end of file
88 p4 = pout(clk,sig1);
No newline at end of file
89
No newline at end of file
90 for x in range(dtsz):
No newline at end of file
91 clk.tick();
No newline at end of file
92
No newline at end of file
93
No newline at end of file
94 out = np.array(p4.get_data());
No newline at end of file
95
No newline at end of file
96
No newline at end of file
97 fft_out = np.fft.fft(out);
No newline at end of file
98 fft_out = np.fft.fftshift(fft_out);
No newline at end of file
99 fft_gain = np.abs(fft_out*np.conj(fft_out))+0.000000001;
No newline at end of file
100 fft_db = 10.0*np.log10(fft_gain);
No newline at end of file
101
No newline at end of file
102
No newline at end of file
103 fig = plt.figure()
No newline at end of file
104 amp_f = fig.add_subplot(2,1,1)
No newline at end of file
105 amp_f.plot(freq,fft_db, color='blue');
No newline at end of file
106 amp_f.grid();
No newline at end of file
107 amp_t = fig.add_subplot(2,1,2)
No newline at end of file
108 amp_t.plot(tsig,out, color='blue');
No newline at end of file
109 amp_t.plot(tsig,p3.get_data(), color='red');
No newline at end of file
110 amp_t.grid();
No newline at end of file
111 plt.show();
No newline at end of file
112
No newline at end of file
113 No newline at end of file
@@ -0,0 +1,126
1 '''
No newline at end of file
2 Created on Jan 7, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from primitives.adder import adder
No newline at end of file
7 from primitives.delay import delay
No newline at end of file
8 from primitives.wire import wire
No newline at end of file
9 from primitives.gain import gain
No newline at end of file
10
No newline at end of file
11
No newline at end of file
12
No newline at end of file
13 class fir_decimator(object):
No newline at end of file
14 '''
No newline at end of file
15 classdocs
No newline at end of file
16 '''
No newline at end of file
17
No newline at end of file
18
No newline at end of file
19 def __init__(self, clk,wire_in, wire_out, dec = 1 ):
No newline at end of file
20 '''
No newline at end of file
21 Constructor
No newline at end of file
22 '''
No newline at end of file
23 self.__clk = clk;
No newline at end of file
24
No newline at end of file
25 self.__win = wire_in;
No newline at end of file
26 self.__wout = wire_out;
No newline at end of file
27 self.__w1 = wire();
No newline at end of file
28 self.__w2 = wire();
No newline at end of file
29 self.__w3 = wire();
No newline at end of file
30 self.__w4 = wire();
No newline at end of file
31 self.__w5 = wire();
No newline at end of file
32 self.__w6 = wire();
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 self.__z1 = delay(clk,deep=3);
No newline at end of file
36 self.__z2 = delay(clk,deep=dec);
No newline at end of file
37 self.__z3 = delay(clk,deep=dec);
No newline at end of file
38 self.__g1 = gain(gain=1);
No newline at end of file
39 self.__g2 = gain(gain=-1.3)
No newline at end of file
40 self.__g3 = gain(gain=-1.7)
No newline at end of file
41 self.__adder = adder();
No newline at end of file
42
No newline at end of file
43 self.__z1.connect_to_in(self.__win);
No newline at end of file
44 self.__z1.connect_to_out(self.__w2);
No newline at end of file
45 self.__g1.connect_to_in(self.__w2);
No newline at end of file
46 self.__g1.connect_to_out(self.__w3);
No newline at end of file
47
No newline at end of file
48 self.__z2.connect_to_in(self.__win);
No newline at end of file
49 self.__z2.connect_to_out(self.__w1);
No newline at end of file
50 self.__g2.connect_to_in(self.__w1);
No newline at end of file
51 self.__g2.connect_to_out(self.__w6);
No newline at end of file
52
No newline at end of file
53 self.__z3.connect_to_in(self.__w3);
No newline at end of file
54 self.__z3.connect_to_out(self.__w4);
No newline at end of file
55 self.__g3.connect_to_in(self.__w4);
No newline at end of file
56 self.__g3.connect_to_out(self.__w5);
No newline at end of file
57
No newline at end of file
58
No newline at end of file
59 self.__adder.connect_to_in(self.__w5);
No newline at end of file
60 self.__adder.connect_to_in(self.__w6);
No newline at end of file
61 self.__adder.connect_to_out(self.__wout);
No newline at end of file
62
No newline at end of file
63 def print_(self):
No newline at end of file
64 print "in",self.__win.read();
No newline at end of file
65 print "1", self.__w1.read();
No newline at end of file
66 print "2",self.__w2.read();
No newline at end of file
67 print "3", self.__w3.read();
No newline at end of file
68 print "out",self.__wout.read();
No newline at end of file
69
No newline at end of file
70
No newline at end of file
71 if __name__=="__main__":
No newline at end of file
72 from primitives.clock import clock
No newline at end of file
73 from primitives.pin import pin
No newline at end of file
74 from primitives.pout import pout
No newline at end of file
75
No newline at end of file
76 import matplotlib.pyplot as plt
No newline at end of file
77 import numpy as np
No newline at end of file
78
No newline at end of file
79 # parametros de decimacion
No newline at end of file
80 dec = 20; # decimacion
No newline at end of file
81 dtsz = 2**16; # cantidad de muestras de data original
No newline at end of file
82 Fs = 1.0#300.0/dec; # frecuencia de muestreo de data original
No newline at end of file
83 Ts = 1.0/Fs; # tiempo de muestreo de data original
No newline at end of file
84 Tt = Ts*dtsz; # tiempo total
No newline at end of file
85 Fst = 2*Fs/dtsz;
No newline at end of file
86
No newline at end of file
87 sig = [0.0 for i in range(dtsz)];
No newline at end of file
88 sig[1] = 1.0
No newline at end of file
89 tsig = [Ts*i for i in range(dtsz)];
No newline at end of file
90 freq = [Fst*i - Fs for i in range(dtsz)];
No newline at end of file
91
No newline at end of file
92 # descripcion del circuito
No newline at end of file
93 clk = clock(); # clock maestro
No newline at end of file
94
No newline at end of file
95 sig0 = wire();
No newline at end of file
96 sig1 = wire();
No newline at end of file
97 fir = fir_decimator(clk, sig0, sig1, dec=dec);
No newline at end of file
98
No newline at end of file
99 p_int = pin(clk,sig0);
No newline at end of file
100 p_int.set_data(sig);
No newline at end of file
101
No newline at end of file
102 p3 = pout(clk,sig0);
No newline at end of file
103 p4 = pout(clk,sig1);
No newline at end of file
104
No newline at end of file
105
No newline at end of file
106 for x in range(dtsz):
No newline at end of file
107 clk.tick();
No newline at end of file
108
No newline at end of file
109 out = np.array(p4.get_data());
No newline at end of file
110
No newline at end of file
111
No newline at end of file
112 fft_out = np.fft.fft(out);
No newline at end of file
113 fft_out = np.fft.fftshift(fft_out);
No newline at end of file
114 fft_gain = np.abs(fft_out*np.conj(fft_out))+0.000000001;
No newline at end of file
115 fft_db = 10.0*np.log10(fft_gain);
No newline at end of file
116
No newline at end of file
117 fig = plt.figure()
No newline at end of file
118 amp_f = fig.add_subplot(2,1,1)
No newline at end of file
119 amp_f.plot(freq,fft_db, color='blue');
No newline at end of file
120 amp_f.grid();
No newline at end of file
121 amp_t = fig.add_subplot(2,1,2)
No newline at end of file
122 amp_t.plot(tsig,out, color='blue');
No newline at end of file
123 amp_t.plot(tsig,p3.get_data(), color='red');
No newline at end of file
124 amp_t.grid();
No newline at end of file
125 plt.show();
No newline at end of file
126 No newline at end of file
@@ -0,0 +1,61
1 '''
No newline at end of file
2 Created on Jan 7, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.delay import delay
No newline at end of file
8 from primitives.adder import adder
No newline at end of file
9 from primitives.wire import wire
No newline at end of file
10
No newline at end of file
11
No newline at end of file
12 class integrator(object):
No newline at end of file
13 '''
No newline at end of file
14 classdocs
No newline at end of file
15 '''
No newline at end of file
16
No newline at end of file
17
No newline at end of file
18 def __init__(self, clk , wire_in, wire_out, deep=1):
No newline at end of file
19 '''
No newline at end of file
20 Constructor
No newline at end of file
21 '''
No newline at end of file
22 self.__wire_in = wire_in;
No newline at end of file
23 self.__wire_out = wire_out;
No newline at end of file
24 self.__wire_1 = wire();
No newline at end of file
25
No newline at end of file
26
No newline at end of file
27 self.__adder = adder();
No newline at end of file
28 self.__z1 = delay(clk,self.__wire_out,self.__wire_1, deep=deep);
No newline at end of file
29 self.__clk = clk;
No newline at end of file
30
No newline at end of file
31
No newline at end of file
32 self.__adder.connect_to_in(self.__wire_in);
No newline at end of file
33 self.__adder.connect_to_in(self.__wire_1);
No newline at end of file
34 self.__adder.connect_to_out(self.__wire_out);
No newline at end of file
35
No newline at end of file
36
No newline at end of file
37
No newline at end of file
38 if __name__=="__main__":
No newline at end of file
39 from primitives.clock import clock
No newline at end of file
40 from primitives.pin import pin
No newline at end of file
41 from primitives.pout import pout
No newline at end of file
42
No newline at end of file
43 segnal = [ 1 for i in range(1,11)];
No newline at end of file
44 segnal += [ -1 for i in range(1,11)];
No newline at end of file
45 segnal += [ 0 for i in range(1,11)];
No newline at end of file
46
No newline at end of file
47 clk = clock();
No newline at end of file
48 sig0 = wire();
No newline at end of file
49 sig1 = wire();
No newline at end of file
50 inte1 = integrator(clk,sig0,sig1);
No newline at end of file
51
No newline at end of file
52 p_int = pin(clk,sig0);
No newline at end of file
53 p_int.set_data(segnal);
No newline at end of file
54 pi = pout(clk,sig0);
No newline at end of file
55 po = pout(clk,sig1);
No newline at end of file
56
No newline at end of file
57 for sig in segnal:
No newline at end of file
58 clk.tick();
No newline at end of file
59
No newline at end of file
60 print pi.get_data()
No newline at end of file
61 print po.get_data() No newline at end of file
@@ -0,0 +1,244
1 '''
No newline at end of file
2 Created on Feb 10, 2015
No newline at end of file
3
No newline at end of file
4 @author: shinobi
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.wire import wire
No newline at end of file
8 from cic.comb import comb
No newline at end of file
9 from cic.integrator import integrator
No newline at end of file
10 from cic.rotated_zero_filter import Hr
No newline at end of file
11 from cic.droop_correction_filter import Hc
No newline at end of file
12 from numpy import math
No newline at end of file
13 from primitives.attenuator import atten
No newline at end of file
14 from primitives.clock import clock
No newline at end of file
15 from primitives.pin import pin
No newline at end of file
16 from primitives.pout import pout
No newline at end of file
17
No newline at end of file
18
No newline at end of file
19 import numpy as np
No newline at end of file
20 import matplotlib.pyplot as plt
No newline at end of file
21
No newline at end of file
22 class Hx(object):
No newline at end of file
23 def __init__(self, clk,wire_in, wire_out,M=1, k=1, cm=1, im=1):
No newline at end of file
24 '''
No newline at end of file
25 Constructor
No newline at end of file
26 '''
No newline at end of file
27 self.__clk = clk;
No newline at end of file
28 self.__stages = k;
No newline at end of file
29 self.__cdly = cm;
No newline at end of file
30 self.__idly = im;
No newline at end of file
31 self.__M = M;
No newline at end of file
32
No newline at end of file
33 self.__wire_int_in = wire_in;
No newline at end of file
34 self.__wire_1 = None;
No newline at end of file
35 self.__wire_int_out = wire_out;
No newline at end of file
36
No newline at end of file
37
No newline at end of file
38 self.__generate_integrator();
No newline at end of file
39 self.__generate_comb();
No newline at end of file
40
No newline at end of file
41 self.__aux=0;
No newline at end of file
42
No newline at end of file
43 def __generate_integrator(self):
No newline at end of file
44 wire_in = self.__wire_int_in;
No newline at end of file
45 clk = self.__clk;
No newline at end of file
46 for i in range(self.__stages):
No newline at end of file
47 wire_out1 = wire();
No newline at end of file
48 wire_out2 = wire();
No newline at end of file
49 atten(wire_in, wire_out1, atte=float(self.__M));
No newline at end of file
50 integrator(clk,wire_out1,wire_out2,deep=self.__idly);
No newline at end of file
51 wire_in = wire_out2;
No newline at end of file
52 self.__wire_1 = wire_out2;
No newline at end of file
53
No newline at end of file
54
No newline at end of file
55 def __generate_comb(self):
No newline at end of file
56 wire_in = self.__wire_1;
No newline at end of file
57 clk = self.__clk;
No newline at end of file
58 for i in range(self.__stages-1):
No newline at end of file
59 wire_out = wire();
No newline at end of file
60 comb(clk,wire_in,wire_out,deep=self.__cdly);
No newline at end of file
61 wire_in = wire_out;
No newline at end of file
62 comb(clk,wire_in,self.__wire_int_out,deep=self.__cdly);
No newline at end of file
63
No newline at end of file
64
No newline at end of file
65
No newline at end of file
66
No newline at end of file
67 class cic_designer(object):
No newline at end of file
68
No newline at end of file
69 def __init__(self,M,K,b0, clk,wire_in, wire_out):
No newline at end of file
70 self.__M1 = 1;
No newline at end of file
71 self.__M2 = 1;
No newline at end of file
72 self.__M = M;
No newline at end of file
73 self.__K1 = K;
No newline at end of file
74 self.__K2 = K;
No newline at end of file
75 self.__Kc = K+1;
No newline at end of file
76 self.__calc_dowsmpls();
No newline at end of file
77 self.__clk = clk;
No newline at end of file
78 self.__win = wire_in;
No newline at end of file
79 self.__wout= wire_out;
No newline at end of file
80
No newline at end of file
81 self.w1 = wire();
No newline at end of file
82 self.w2 = wire();
No newline at end of file
83 self.w3 = wire();
No newline at end of file
84 # H1
No newline at end of file
85 Hx(clk,wire_in, self.w1, k=self.__K1, M=self.__M1, cm=self.__M1, im=1);
No newline at end of file
86 # H2
No newline at end of file
87 Hx(clk,self.w1,self.w2, k=self.__K2, M=self.__M2, cm=self.__M, im=self.__M1);
No newline at end of file
88 # Hr
No newline at end of file
89 Hr(clk,self.__M1,self.__M2,b0, self.w2, self.w3);
No newline at end of file
90 # Hc
No newline at end of file
91 Hc(clk,M,self.__Kc, self.w3, wire_out);
No newline at end of file
92
No newline at end of file
93
No newline at end of file
94
No newline at end of file
95 def simulate(self,sig):
No newline at end of file
96 # descripcion del circuito
No newline at end of file
97 clk = self.__clk;
No newline at end of file
98 p_int = pin(clk,self.__win);
No newline at end of file
99 p_int.set_data(sig);
No newline at end of file
100 self.dtsz = len(sig);
No newline at end of file
101
No newline at end of file
102 self.pin = pout(clk,self.__win);
No newline at end of file
103 self.p1 = pout(clk,self.w1);
No newline at end of file
104 self.p2 = pout(clk,self.w2);
No newline at end of file
105 self.p3 = pout(clk,self.w3);
No newline at end of file
106 self.pout = pout(clk,self.__wout);
No newline at end of file
107
No newline at end of file
108 for x in range(self.dtsz):
No newline at end of file
109 clk.tick();
No newline at end of file
110
No newline at end of file
111
No newline at end of file
112 def plot_frequency_response(self,Fs):
No newline at end of file
113 # parametros de decimacion
No newline at end of file
114
No newline at end of file
115 dtsz = self.dtsz;
No newline at end of file
116 Fst = Fs/dtsz;
No newline at end of file
117 Ts = 1.0/Fs;
No newline at end of file
118 tsig = [Ts*i for i in range(dtsz)];
No newline at end of file
119 # freq = [Fst*i-Fs/2 for i in range(dtsz)];
No newline at end of file
120
No newline at end of file
121 t_in = np.array(self.pin.get_data());
No newline at end of file
122 # t_s1 = np.array(self.p1.get_data());
No newline at end of file
123 # t_s2 = np.array(self.p2.get_data());
No newline at end of file
124 # t_s3 = np.array(self.p3.get_data());
No newline at end of file
125 # t_out = np.array(self.pout.get_data());
No newline at end of file
126
No newline at end of file
127 # f_in = self.__calc_fft(t_in);
No newline at end of file
128 # f_s1 = self.__calc_fft(t_s1);
No newline at end of file
129 # f_s2 = self.__calc_fft(t_s2);
No newline at end of file
130 # f_s3 = self.__calc_fft(t_s3);
No newline at end of file
131 # f_out = self.__calc_fft(t_out);
No newline at end of file
132
No newline at end of file
133 # plt.figure();
No newline at end of file
134 # plt.title("Seismic Signal");
No newline at end of file
135 # plt.plot(freq,f_in);
No newline at end of file
136 # plt.grid();
No newline at end of file
137
No newline at end of file
138 plt.figure();
No newline at end of file
139 # plt.subplot(231);
No newline at end of file
140 # plt.title("Comparacion");
No newline at end of file
141 # i0 = len(freq)/2;
No newline at end of file
142 # plt.plot(freq[i0:7*i0/5],f_s1[i0:7*i0/5],'r--',freq[i0:7*i0/5],f_s2[i0:7*i0/5],'g--',
No newline at end of file
143 # freq[i0:7*i0/5],f_s3[i0:7*i0/5],'b--',freq[i0:7*i0/5],f_out[i0:7*i0/5],'r');
No newline at end of file
144 # plt.ylim(-300, 25);
No newline at end of file
145 # plt.grid();
No newline at end of file
146
No newline at end of file
147 # plt.subplot(232);
No newline at end of file
148 # plt.title("H1");
No newline at end of file
149 # plt.plot(freq,f_s1);
No newline at end of file
150 # plt.grid();
No newline at end of file
151 #
No newline at end of file
152 # plt.subplot(233);
No newline at end of file
153 # plt.title("H1 + H2 (CIC)");
No newline at end of file
154 # plt.plot(freq,f_s2);
No newline at end of file
155 # plt.grid();
No newline at end of file
156 #
No newline at end of file
157 # plt.subplot(234);
No newline at end of file
158 # plt.title("H1 + H2 + Hr (CIC + Rotacion de Zero)");
No newline at end of file
159 # plt.plot(freq,f_s3);
No newline at end of file
160 # plt.grid();
No newline at end of file
161 #
No newline at end of file
162 # plt.subplot(235);
No newline at end of file
163 # plt.title("CIC + Rotacion de Zero + Compensador");
No newline at end of file
164 # plt.plot(freq,f_out);
No newline at end of file
165 # plt.grid();
No newline at end of file
166 #
No newline at end of file
167 # plt.subplot(236);
No newline at end of file
168 plt.title("Respuesta al Impulso del Filtro");
No newline at end of file
169 #i1 = len(tsig)/8;
No newline at end of file
170 plt.plot(tsig,t_out,'blue');
No newline at end of file
171 plt.plot(tsig,t_in,'red');
No newline at end of file
172 plt.grid();
No newline at end of file
173 plt.show();
No newline at end of file
174
No newline at end of file
175
No newline at end of file
176
No newline at end of file
177
No newline at end of file
178 def __calc_fft(self,sig):
No newline at end of file
179 fft_out = np.fft.fft(sig);
No newline at end of file
180 fft_out = np.fft.fftshift(fft_out);
No newline at end of file
181 fft_gain = np.abs(fft_out*np.conj(fft_out));
No newline at end of file
182 fft_db = 10.0*np.log10(fft_gain);
No newline at end of file
183 return fft_db;
No newline at end of file
184
No newline at end of file
185
No newline at end of file
186
No newline at end of file
187 def __calc_dowsmpls(self):
No newline at end of file
188 sqrm_ = int(math.floor(math.sqrt(self.__M)));
No newline at end of file
189 if self.__M <= 64:
No newline at end of file
190 # if M <= 64 , M2 >= M1; whenever possible M1 = M2
No newline at end of file
191 rang = range(1,sqrm_+1);
No newline at end of file
192 rang.reverse();
No newline at end of file
193 for m1_ in rang:
No newline at end of file
194 if ((self.__M % m1_) == 0) and (m1_ <> 1):
No newline at end of file
195 self.__M2 = int(self.__M/m1_);
No newline at end of file
196 self.__M1 = int(m1_);
No newline at end of file
197 print self.__M, self.__M1,self.__M2
No newline at end of file
198 return;
No newline at end of file
199 else:
No newline at end of file
200 # if M > 64 , M2 < M1
No newline at end of file
201 rang = range(1,sqrm_);
No newline at end of file
202 rang.reverse();
No newline at end of file
203 for m2_ in rang:
No newline at end of file
204 if ((self.__M % m2_) == 0) and (m2_ <> 1):
No newline at end of file
205 self.__M1 = int(self.__M/m2_);
No newline at end of file
206 self.__M2 = int(m2_);
No newline at end of file
207 print self.__M, self.__M1,self.__M2
No newline at end of file
208 return;
No newline at end of file
209
No newline at end of file
210 print "Elegir otro valor para M", self.__M, self.__M1,self.__M2;
No newline at end of file
211 self.__M1 = -1;
No newline at end of file
212 self.__M2 = -1;
No newline at end of file
213
No newline at end of file
214
No newline at end of file
215
No newline at end of file
216 def test_downsamples(self):
No newline at end of file
217 for i in range(1,101):
No newline at end of file
218 self.__M=i;
No newline at end of file
219 self.__calc_dowsmpls();
No newline at end of file
220
No newline at end of file
221
No newline at end of file
222
No newline at end of file
223 if __name__=="__main__":
No newline at end of file
224 M = 2;
No newline at end of file
225 K = 3;
No newline at end of file
226 ro= 100;
No newline at end of file
227
No newline at end of file
228 dtsz = 2**16; # cantidad de muestras de data original
No newline at end of file
229 Fs = 1.0; # frecuencia de muestreo de data original
No newline at end of file
230
No newline at end of file
231 # data original (impulso)
No newline at end of file
232 #sig = np.random.normal(0,1,dtsz);
No newline at end of file
233 sig = [0 for i in range(dtsz)];
No newline at end of file
234 sig[0] =1;
No newline at end of file
235
No newline at end of file
236 win = wire();
No newline at end of file
237 wout = wire();
No newline at end of file
238 clk = clock();
No newline at end of file
239 cic = cic_designer(M,K,ro, clk,win, wout);
No newline at end of file
240
No newline at end of file
241 cic.simulate(sig);
No newline at end of file
242 cic.plot_frequency_response(Fs);
No newline at end of file
243
No newline at end of file
244 No newline at end of file
@@ -0,0 +1,136
1 '''
No newline at end of file
2 Created on Feb 10, 2015
No newline at end of file
3
No newline at end of file
4 @author: shinobi
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.wire import wire
No newline at end of file
8 from primitives.gain import gain
No newline at end of file
9 from primitives.delay import delay
No newline at end of file
10 from primitives.adder import adder
No newline at end of file
11 import numpy as np
No newline at end of file
12 from primitives.attenuator import atten
No newline at end of file
13
No newline at end of file
14 class Hr(object):
No newline at end of file
15 def __init__(self,clk,M1,M2,ro,wire_in, wire_out):
No newline at end of file
16 self.__clk = clk;
No newline at end of file
17 self.__M1 = M1;
No newline at end of file
18 self.__M2 = M2;
No newline at end of file
19 self.__ro = ro; # oversampling factor
No newline at end of file
20 self.__C = [];
No newline at end of file
21 self.__calc_zero_rotated_coefs();
No newline at end of file
22 self.__wiew_in = wire_in;
No newline at end of file
23 self.__wire_out = wire_out;
No newline at end of file
24 self.__generate_filter();
No newline at end of file
25 self.__atte = 1;
No newline at end of file
26
No newline at end of file
27
No newline at end of file
28 def __generate_filter(self):
No newline at end of file
29 wire_1 = self.__wiew_in;
No newline at end of file
30 clk = self.__clk;
No newline at end of file
31 M = self.__M1*self.__M2;
No newline at end of file
32 M2 = self.__M2;
No newline at end of file
33 M1 = self.__M1;
No newline at end of file
34 C = self.__C;
No newline at end of file
35 wadd = [];
No newline at end of file
36
No newline at end of file
37 for i in range(self.__M2-1):
No newline at end of file
38 w2 = wire();
No newline at end of file
39 w3 = wire();
No newline at end of file
40 w4 = wire();
No newline at end of file
41 w5 = wire();
No newline at end of file
42 wadd.append(w5);
No newline at end of file
43 wout = wire();
No newline at end of file
44 delay(clk, wire_1, w2,deep=M);
No newline at end of file
45 gain(wire_1, w3, C[i]);
No newline at end of file
46 gain(w2, w4, C[M2-2-i]);
No newline at end of file
47 ad = adder();
No newline at end of file
48 ad.connect_to_in(w3);ad.connect_to_in(w4);
No newline at end of file
49 ad.connect_to_out(w5);
No newline at end of file
50 delay(clk, wire_1, wout,deep=M1);
No newline at end of file
51 wire_1 = wout;
No newline at end of file
52
No newline at end of file
53 w5 = wire();
No newline at end of file
54 w6 = wire();
No newline at end of file
55 wadd.append(w5);
No newline at end of file
56 gain(wire_1,w5 , C[i]);
No newline at end of file
57
No newline at end of file
58 ad = adder();
No newline at end of file
59 for w in wadd:
No newline at end of file
60 ad.connect_to_in(w);
No newline at end of file
61 ad.connect_to_out(w6);
No newline at end of file
62 self.__atte = atten(w6,self.__wire_out, atte=M2**2);
No newline at end of file
63
No newline at end of file
64
No newline at end of file
65 def __calc_zero_rotated_coefs(self):
No newline at end of file
66 betha = np.pi*self.__M1/(2.0*self.__ro);
No newline at end of file
67 c = [1.0 , 2*np.cos(betha)];
No newline at end of file
68 for i in range(2, self.__M2):
No newline at end of file
69 c.append(2*np.cos(betha)*c[i-1]-c[i-2]);
No newline at end of file
70 for i in range(self.__M2):
No newline at end of file
71 self.__C.append(np.round(c[i]/2**-5)*2**-5);
No newline at end of file
72
No newline at end of file
73 if __name__=="__main__":
No newline at end of file
74 from primitives.clock import clock
No newline at end of file
75 from primitives.pin import pin
No newline at end of file
76 from primitives.pout import pout
No newline at end of file
77
No newline at end of file
78 import matplotlib.pyplot as plt
No newline at end of file
79
No newline at end of file
80 # parametros de decimacion
No newline at end of file
81 M1 = 6
No newline at end of file
82 M2 = 10;
No newline at end of file
83 ro = 70;#18.85;
No newline at end of file
84
No newline at end of file
85 dtsz = 2**16; # cantidad de muestras de data original
No newline at end of file
86 Fs = 1000.0; # frecuencia de muestreo de data original
No newline at end of file
87 Ts = 1.0/Fs; # tiempo de muestreo de data original
No newline at end of file
88 Tt = Ts*dtsz; # tiempo total
No newline at end of file
89 Fst = Fs/dtsz;
No newline at end of file
90
No newline at end of file
91 # data original (impulso)
No newline at end of file
92 sig = [0 for i in range(dtsz)];
No newline at end of file
93 sig[0] = 1;
No newline at end of file
94
No newline at end of file
95 tsig = [Ts*i for i in range(dtsz)];
No newline at end of file
96 freq = [Fst*i-Fs/2 for i in range(dtsz)];
No newline at end of file
97
No newline at end of file
98 # descripcion del circuito
No newline at end of file
99 clk = clock(); # clock maestro
No newline at end of file
100
No newline at end of file
101 sig0 = wire();
No newline at end of file
102 sig1 = wire();
No newline at end of file
103
No newline at end of file
104 h = Hr(clk,M1,M2,ro,sig0, sig1);
No newline at end of file
105
No newline at end of file
106 p_int = pin(clk,sig0);
No newline at end of file
107 p_int.set_data(sig);
No newline at end of file
108
No newline at end of file
109 p3 = pout(clk,sig0);
No newline at end of file
110 p4 = pout(clk,sig1);
No newline at end of file
111
No newline at end of file
112 for x in range(dtsz):
No newline at end of file
113 clk.tick();
No newline at end of file
114 #cic.print_()
No newline at end of file
115
No newline at end of file
116
No newline at end of file
117 out = np.array(p4.get_data());
No newline at end of file
118
No newline at end of file
119
No newline at end of file
120 fft_out = np.fft.fft(out);
No newline at end of file
121 fft_out = np.fft.fftshift(fft_out);
No newline at end of file
122 fft_gain = np.abs(fft_out*np.conj(fft_out))+0.000000001;
No newline at end of file
123 fft_db = 10.0*np.log10(fft_gain);
No newline at end of file
124
No newline at end of file
125
No newline at end of file
126 fig = plt.figure()
No newline at end of file
127 amp_f = fig.add_subplot(2,1,1)
No newline at end of file
128 amp_f.plot(freq,fft_db, color='blue');
No newline at end of file
129 amp_f.grid();
No newline at end of file
130 amp_t = fig.add_subplot(2,1,2)
No newline at end of file
131 amp_t.plot(tsig,out, color='blue');
No newline at end of file
132 amp_t.plot(tsig,p3.get_data(), color='red');
No newline at end of file
133 amp_t.grid();
No newline at end of file
134 plt.show();
No newline at end of file
135
No newline at end of file
136 No newline at end of file
1 NO CONTENT: new file 10644
NO CONTENT: new file 10644
@@ -0,0 +1,85
1 '''
No newline at end of file
2 Created on Jan 6, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from decimal import *
No newline at end of file
8
No newline at end of file
9 POS = 1;
No newline at end of file
10 NEG = -1;
No newline at end of file
11
No newline at end of file
12 class adder(object):
No newline at end of file
13 '''
No newline at end of file
14 classdocs
No newline at end of file
15 '''
No newline at end of file
16
No newline at end of file
17 def __init__(self):
No newline at end of file
18 '''
No newline at end of file
19 Constructor
No newline at end of file
20 '''
No newline at end of file
21 self.__wires_in__ = [];
No newline at end of file
22 self.__wire_out__ = None;
No newline at end of file
23
No newline at end of file
24 self.__wires_in_signs__ = [];
No newline at end of file
25
No newline at end of file
26
No newline at end of file
27 def __update__(self):
No newline at end of file
28 acum = 0;
No newline at end of file
29 inputs = zip(self.__wires_in__,self.__wires_in_signs__);
No newline at end of file
30 for adding,sign in inputs:
No newline at end of file
31 acum += adding.read()*sign;
No newline at end of file
32 if type(self.__wire_out__)<> type(None):
No newline at end of file
33 self.__wire_out__.drive(acum);
No newline at end of file
34
No newline at end of file
35
No newline at end of file
36
No newline at end of file
37 def connect_to_in(self,wire_in,sign=POS):
No newline at end of file
38 self.__wires_in__.append(wire_in);
No newline at end of file
39 self.__wires_in_signs__.append(sign);
No newline at end of file
40 wire_in.async_element(self);
No newline at end of file
41 self.__update__();
No newline at end of file
42
No newline at end of file
43 def connect_to_out(self,wire_out):
No newline at end of file
44 self.__wire_out__ = wire_out;
No newline at end of file
45 self.__wire_out__.drive(0);
No newline at end of file
46 self.__update__();
No newline at end of file
47
No newline at end of file
48 if __name__=="__main__":
No newline at end of file
49 from primitives.clock import clock
No newline at end of file
50 from primitives.pin import pin
No newline at end of file
51 from primitives.wire import wire
No newline at end of file
52
No newline at end of file
53 clk = clock();
No newline at end of file
54
No newline at end of file
55 s = adder();
No newline at end of file
56 sig1 = wire();
No newline at end of file
57 sig2 = wire();
No newline at end of file
58 sig3 = wire();
No newline at end of file
59 sig4 = wire();
No newline at end of file
60
No newline at end of file
61 s.connect_to_in(sig1);
No newline at end of file
62 s.connect_to_in(sig2);
No newline at end of file
63 #s.connect_to_in(sig3,NEG);
No newline at end of file
64 s.connect_to_out(sig4);
No newline at end of file
65
No newline at end of file
66 segnal1 = [ Decimal(1) *i for i in range(100)];
No newline at end of file
67 segnal2 = [ Decimal(2) for i in range(100)];
No newline at end of file
68 #segnal3 = [3 for i in range(100)];
No newline at end of file
69
No newline at end of file
70 p1 = pin(clk,sig1);
No newline at end of file
71 p1.set_data(segnal1);
No newline at end of file
72
No newline at end of file
73 p2 = pin(clk,sig2);
No newline at end of file
74 p2.set_data(segnal2);
No newline at end of file
75
No newline at end of file
76 #p3 = pin(clk,sig3);
No newline at end of file
77 #p3.set_data(segnal3);
No newline at end of file
78
No newline at end of file
79
No newline at end of file
80 for i in segnal1:
No newline at end of file
81 clk.tick();
No newline at end of file
82 print sig1.read(),sig2.read()#,sig3.read();
No newline at end of file
83 print sig4.read();
No newline at end of file
84 print "-------"
No newline at end of file
85 No newline at end of file
@@ -0,0 +1,45
1 '''
No newline at end of file
2 Created on Jan 8, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from primitives.wire import wire
No newline at end of file
7 import numpy as np
No newline at end of file
8 from decimal import *
No newline at end of file
9
No newline at end of file
10 class atten(object):
No newline at end of file
11 '''
No newline at end of file
12 classdocs
No newline at end of file
13 '''
No newline at end of file
14
No newline at end of file
15
No newline at end of file
16 def __init__(self, wire_in,wire_out, atte = Decimal(1)):
No newline at end of file
17 '''
No newline at end of file
18 Constructor
No newline at end of file
19 '''
No newline at end of file
20
No newline at end of file
21 self.__wire_in = wire_in;
No newline at end of file
22 self.__wire_out = wire_out;
No newline at end of file
23
No newline at end of file
24 wire_in.async_element(self);
No newline at end of file
25 self.__atte = Decimal(atte);
No newline at end of file
26 self.__wire_out.drive(Decimal(0));
No newline at end of file
27 self.__update__()
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 def __update__(self):
No newline at end of file
31 if type(self.__wire_out)<> type(None):
No newline at end of file
32 self.__wire_out.drive(self.__wire_in.read()/self.__atte);
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 if __name__=="__main__":
No newline at end of file
36 sig1 = wire(Decimal(2));
No newline at end of file
37 sig2 = wire();
No newline at end of file
38 g = atten(sig1,sig2,atte=Decimal(10));
No newline at end of file
39
No newline at end of file
40
No newline at end of file
41 print sig2.read();
No newline at end of file
42
No newline at end of file
43 sig1.drive(Decimal(2500));
No newline at end of file
44
No newline at end of file
45 print sig2.read(); No newline at end of file
@@ -0,0 +1,110
1 '''
No newline at end of file
2 Created on Jan 7, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 class clock(object):
No newline at end of file
8 '''
No newline at end of file
9 classdocs
No newline at end of file
10 '''
No newline at end of file
11
No newline at end of file
12 def __init__(self,steps=1,name=""):
No newline at end of file
13 '''
No newline at end of file
14 Constructor
No newline at end of file
15 '''
No newline at end of file
16 self.__elems__ = [];
No newline at end of file
17 self.__clks__ = [];
No newline at end of file
18 self.__steps__ = steps;
No newline at end of file
19 self.__cnt__ = steps;
No newline at end of file
20 self.__name = name;
No newline at end of file
21 self.__first_tick__=True;
No newline at end of file
22
No newline at end of file
23 def connect_element(self,elem):
No newline at end of file
24 if type(elem) <> type(self):
No newline at end of file
25 self.__elems__.append(elem);
No newline at end of file
26
No newline at end of file
27 def get_subclock(self,div):
No newline at end of file
28 clk = clock(steps=div);
No newline at end of file
29 self.__clks__.append(clk);
No newline at end of file
30 return clk;
No newline at end of file
31
No newline at end of file
32 def __initialization__(self):
No newline at end of file
33 for elem in self.__elems__:
No newline at end of file
34 elem.__initialization__();
No newline at end of file
35 for elem in self.__clks__:
No newline at end of file
36 elem.__initialization__();
No newline at end of file
37
No newline at end of file
38 def tick(self):
No newline at end of file
39 if self.__first_tick__:
No newline at end of file
40 self.__first_tick__= False;
No newline at end of file
41 self.__initialization__();
No newline at end of file
42 self.__next_sample__();
No newline at end of file
43 self.__edge__();
No newline at end of file
44 self.__stabilize__();
No newline at end of file
45 self.__propagate__();
No newline at end of file
46 self.__read_sample__();
No newline at end of file
47
No newline at end of file
48 #print "--------------------"
No newline at end of file
49
No newline at end of file
50 def __next_sample__(self):
No newline at end of file
51 self.__cnt__ += 1;
No newline at end of file
52 if self.__cnt__ >= self.__steps__:
No newline at end of file
53
No newline at end of file
54 for elem in self.__elems__:
No newline at end of file
55 elem.__next_sample__();
No newline at end of file
56 for elem in self.__clks__:
No newline at end of file
57 elem.__next_sample__();
No newline at end of file
58 #print "next sample",self.__name;
No newline at end of file
59
No newline at end of file
60 def __edge__(self):
No newline at end of file
61 if self.__cnt__ >= self.__steps__:
No newline at end of file
62 for elem in self.__elems__:
No newline at end of file
63 elem.__edge__();
No newline at end of file
64 for elem in self.__clks__:
No newline at end of file
65 elem.__edge__();
No newline at end of file
66 #print "edge",self.__name,self.__cnt__,self.__steps__;
No newline at end of file
67
No newline at end of file
68 def __stabilize__(self):
No newline at end of file
69 if self.__cnt__ >= self.__steps__:
No newline at end of file
70 for elem in self.__elems__:
No newline at end of file
71 elem.__stabilize__();
No newline at end of file
72 for elem in self.__clks__:
No newline at end of file
73 elem.__stabilize__();
No newline at end of file
74 #print "stabilize",self.__name;;
No newline at end of file
75
No newline at end of file
76
No newline at end of file
77 def __propagate__(self):
No newline at end of file
78 if self.__cnt__ >= self.__steps__:
No newline at end of file
79 for elem in self.__elems__:
No newline at end of file
80 elem.__propagate__();
No newline at end of file
81 for elem in self.__clks__:
No newline at end of file
82 elem.__propagate__();
No newline at end of file
83 #print "propagate",self.__name;
No newline at end of file
84
No newline at end of file
85
No newline at end of file
86 def __read_sample__(self):
No newline at end of file
87 if self.__cnt__ >= self.__steps__:
No newline at end of file
88 self.__cnt__ = 0;
No newline at end of file
89 for elem in self.__elems__:
No newline at end of file
90 elem.__read_sample__();
No newline at end of file
91 for elem in self.__clks__:
No newline at end of file
92 elem.__read_sample__();
No newline at end of file
93 #print "read sample",self.__name;
No newline at end of file
94
No newline at end of file
95
No newline at end of file
96 def get_cnt(self):
No newline at end of file
97 return self.__cnt__;
No newline at end of file
98
No newline at end of file
99
No newline at end of file
100 if __name__=="__main__":
No newline at end of file
101 clk1 = clock(name="master");
No newline at end of file
102 clk2 = clk1.get_subclock(4);
No newline at end of file
103 clk1.tick()
No newline at end of file
104 clk1.tick()
No newline at end of file
105 clk1.tick()
No newline at end of file
106 clk1.tick()
No newline at end of file
107 clk1.tick()
No newline at end of file
108 clk1.tick()
No newline at end of file
109 clk1.tick()
No newline at end of file
110 clk1.tick() No newline at end of file
@@ -0,0 +1,74
1 '''
No newline at end of file
2 Created on Jan 6, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from decimal import *
No newline at end of file
7
No newline at end of file
8 class delay(object):
No newline at end of file
9 '''
No newline at end of file
10 classdocs
No newline at end of file
11 '''
No newline at end of file
12
No newline at end of file
13 def __init__(self,clk,wire_in, wire_out, deep=1):
No newline at end of file
14 '''
No newline at end of file
15 Constructor
No newline at end of file
16 '''
No newline at end of file
17 self.__wire_in = wire_in;
No newline at end of file
18 self.__wire_out = wire_out;
No newline at end of file
19 self.__stt = [Decimal(0) for i in range(deep)];
No newline at end of file
20 self.__clk = clk;
No newline at end of file
21 self.__clk.connect_element(self);
No newline at end of file
22
No newline at end of file
23
No newline at end of file
24
No newline at end of file
25 def __initialization__(self):
No newline at end of file
26 self.__wire_out.drive(Decimal(0));
No newline at end of file
27
No newline at end of file
28
No newline at end of file
29 def __next_sample__(self):
No newline at end of file
30 pass;
No newline at end of file
31
No newline at end of file
32
No newline at end of file
33 def __edge__(self):
No newline at end of file
34 pass;
No newline at end of file
35
No newline at end of file
36
No newline at end of file
37 def __stabilize__(self):
No newline at end of file
38 self.__wire_out.drive(self.__stt.pop(0));
No newline at end of file
39
No newline at end of file
40
No newline at end of file
41 def __propagate__(self):
No newline at end of file
42 self.__stt.append(self.__wire_in.read());
No newline at end of file
43
No newline at end of file
44
No newline at end of file
45 def __read_sample__(self):
No newline at end of file
46 pass;
No newline at end of file
47
No newline at end of file
48
No newline at end of file
49
No newline at end of file
50
No newline at end of file
51 if __name__=="__main__":
No newline at end of file
52 from primitives.wire import wire
No newline at end of file
53 from primitives.clock import clock
No newline at end of file
54 from primitives.pin import pin
No newline at end of file
55
No newline at end of file
56 signal = [Decimal(i) for i in range(1,31)];
No newline at end of file
57 #signal[0]=1;
No newline at end of file
58
No newline at end of file
59 clk = clock();
No newline at end of file
60 sig0 = wire();
No newline at end of file
61 sig1 = wire();
No newline at end of file
62 z1 = delay(clk,sig0,sig1,deep=1);
No newline at end of file
63
No newline at end of file
64
No newline at end of file
65 p_int = pin(clk,wire_out=sig0);
No newline at end of file
66 p_int.set_data(signal);
No newline at end of file
67
No newline at end of file
68
No newline at end of file
69
No newline at end of file
70 for i in signal:
No newline at end of file
71 clk.tick();
No newline at end of file
72 print sig0.read(), sig1.read();
No newline at end of file
73 print "-----------------"
No newline at end of file
74 No newline at end of file
@@ -0,0 +1,104
1 '''
No newline at end of file
2 Created on Jan 7, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from primitives.wire import wire
No newline at end of file
7 from primitives.clock import clock
No newline at end of file
8
No newline at end of file
9 class downsampler(object):
No newline at end of file
10 '''
No newline at end of file
11 classdocs
No newline at end of file
12 '''
No newline at end of file
13
No newline at end of file
14
No newline at end of file
15 def __init__(self, clk, dec):
No newline at end of file
16 '''
No newline at end of file
17 Constructor
No newline at end of file
18 '''
No newline at end of file
19 self.__wire_in__ = None;
No newline at end of file
20 self.__stt__ = 0;
No newline at end of file
21 if dec <= 0 : dec = 1;
No newline at end of file
22 self.__dwn_clk__ = clk.get_subclock(dec);
No newline at end of file
23 self.__wire_out__ = None;
No newline at end of file
24 self.__clk__ = clk;
No newline at end of file
25 self.__dwn_clk__.connect_element(self);
No newline at end of file
26
No newline at end of file
27 self.__high_level__ = False;
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 def get_down_clock(self):
No newline at end of file
31 return self.__dwn_clk__;
No newline at end of file
32
No newline at end of file
33 def __update__(self):
No newline at end of file
34 pass;
No newline at end of file
35
No newline at end of file
36
No newline at end of file
37
No newline at end of file
38 def __initialization__(self):
No newline at end of file
39 self.__wire_out__.drive(0);
No newline at end of file
40
No newline at end of file
41
No newline at end of file
42 def __next_sample__(self):
No newline at end of file
43 pass;
No newline at end of file
44
No newline at end of file
45
No newline at end of file
46 def __edge__(self):
No newline at end of file
47 pass;
No newline at end of file
48 # self.__high_level__ = True;
No newline at end of file
49 # self.__wire_out__.drive(self.__wire_in__.read());
No newline at end of file
50
No newline at end of file
51
No newline at end of file
52 def __stabilize__(self):
No newline at end of file
53 self.__wire_out__.drive(self.__wire_in__.read());
No newline at end of file
54
No newline at end of file
55
No newline at end of file
56 def __propagate__(self):
No newline at end of file
57 pass;
No newline at end of file
58
No newline at end of file
59
No newline at end of file
60 def __read_sample__(self):
No newline at end of file
61 self.__high_level__ = False;
No newline at end of file
62
No newline at end of file
63 def connect_to_in(self,wire_in):
No newline at end of file
64 self.__wire_in__ = wire_in;
No newline at end of file
65 #wire_in.async_element(self);
No newline at end of file
66
No newline at end of file
67
No newline at end of file
68 def connect_to_out(self,wire_out):
No newline at end of file
69 self.__wire_out__ = wire_out;
No newline at end of file
70
No newline at end of file
71
No newline at end of file
72 if __name__=="__main__":
No newline at end of file
73 from primitives.pin import pin
No newline at end of file
74 from primitives.pout import pout
No newline at end of file
75 segnal = [i for i in range(1,101)];
No newline at end of file
76 dec = 5;
No newline at end of file
77
No newline at end of file
78 clk = clock();
No newline at end of file
79 d1 = downsampler(clk,dec);
No newline at end of file
80 dclk = d1.get_down_clock()
No newline at end of file
81
No newline at end of file
82
No newline at end of file
83 sig0 = wire();
No newline at end of file
84 sig1 = wire();
No newline at end of file
85
No newline at end of file
86 d1.connect_to_in(sig0);
No newline at end of file
87 d1.connect_to_out(sig1);
No newline at end of file
88
No newline at end of file
89
No newline at end of file
90 p_int = pin(clk,sig0);
No newline at end of file
91 p_int.set_data(segnal);
No newline at end of file
92
No newline at end of file
93 p4 = pout(clk,sig0);
No newline at end of file
94 p5 = pout(dclk,sig1);
No newline at end of file
95
No newline at end of file
96
No newline at end of file
97 print sig0.read(),sig1.read();
No newline at end of file
98 for sig in segnal[1:103]:
No newline at end of file
99 clk.tick();
No newline at end of file
100 print sig0.read(),sig1.read();
No newline at end of file
101
No newline at end of file
102 print segnal;
No newline at end of file
103 print p4.get_data();
No newline at end of file
104 print p5.get_data(); No newline at end of file
@@ -0,0 +1,45
1 '''
No newline at end of file
2 Created on Jan 8, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from primitives.wire import wire
No newline at end of file
7 import numpy as np
No newline at end of file
8 from decimal import *
No newline at end of file
9
No newline at end of file
10 class gain(object):
No newline at end of file
11 '''
No newline at end of file
12 classdocs
No newline at end of file
13 '''
No newline at end of file
14
No newline at end of file
15
No newline at end of file
16 def __init__(self, wire_in,wire_out, gain = Decimal(1)):
No newline at end of file
17 '''
No newline at end of file
18 Constructor
No newline at end of file
19 '''
No newline at end of file
20
No newline at end of file
21 self.__wire_in = wire_in;
No newline at end of file
22 self.__wire_out = wire_out;
No newline at end of file
23
No newline at end of file
24 wire_in.async_element(self);
No newline at end of file
25 self.__gain = Decimal(gain);
No newline at end of file
26 self.__wire_out.drive(Decimal(0));
No newline at end of file
27 self.__update__()
No newline at end of file
28
No newline at end of file
29
No newline at end of file
30 def __update__(self):
No newline at end of file
31 if type(self.__wire_out)<> type(None):
No newline at end of file
32 self.__wire_out.drive(self.__wire_in.read()*self.__gain);
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 if __name__=="__main__":
No newline at end of file
36 sig1 = wire(Decimal(2));
No newline at end of file
37 sig2 = wire();
No newline at end of file
38 g = gain(sig1,sig2,gain=Decimal(100));
No newline at end of file
39
No newline at end of file
40
No newline at end of file
41 print sig2.read();
No newline at end of file
42
No newline at end of file
43 sig1.drive(Decimal(25));
No newline at end of file
44
No newline at end of file
45 print sig2.read(); No newline at end of file
@@ -0,0 +1,67
1 '''
No newline at end of file
2 Created on Jan 8, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.wire import wire
No newline at end of file
8 from decimal import *
No newline at end of file
9
No newline at end of file
10 class pin(object):
No newline at end of file
11 '''
No newline at end of file
12 classdocs
No newline at end of file
13 '''
No newline at end of file
14
No newline at end of file
15
No newline at end of file
16 def __init__(self,clk,wire_out=wire()):
No newline at end of file
17 '''
No newline at end of file
18 Constructor
No newline at end of file
19 '''
No newline at end of file
20
No newline at end of file
21 self.__clk__ = clk;
No newline at end of file
22 self.__clk__.connect_element(self);
No newline at end of file
23 self.__wire_out__ = None;
No newline at end of file
24
No newline at end of file
25 self.__data__ = [];
No newline at end of file
26 self.__size__ = 0;
No newline at end of file
27 self.__tick_idx__ = 0;
No newline at end of file
28
No newline at end of file
29 self.__wire_out__ = wire_out;
No newline at end of file
30
No newline at end of file
31 def __initialization__(self):
No newline at end of file
32 self.__wire_out__.drive(0);
No newline at end of file
33
No newline at end of file
34
No newline at end of file
35 def __next_sample__(self):
No newline at end of file
36 self.__wire_out__.drive(Decimal(self.__data__[self.__tick_idx__]));
No newline at end of file
37 self.__tick_idx__ += 1;
No newline at end of file
38 if self.__tick_idx__ < self.__size__:
No newline at end of file
39 pass
No newline at end of file
40 else:
No newline at end of file
41 self.__wire_out__.drive(0);
No newline at end of file
42 #self.__tick_idx__ = 0;
No newline at end of file
43
No newline at end of file
44 def __edge__(self):
No newline at end of file
45 pass;
No newline at end of file
46
No newline at end of file
47 def __stabilize__(self):
No newline at end of file
48 pass;
No newline at end of file
49
No newline at end of file
50
No newline at end of file
51 def __propagate__(self):
No newline at end of file
52 pass;
No newline at end of file
53
No newline at end of file
54
No newline at end of file
55 def __read_sample__(self):
No newline at end of file
56 pass;
No newline at end of file
57
No newline at end of file
58
No newline at end of file
59 def set_data(self,data=[]):
No newline at end of file
60 self.__data__ = data;
No newline at end of file
61 self.__size__ = len(data);
No newline at end of file
62 self.__index__ = 0;
No newline at end of file
63 self.__wire_out__.drive(Decimal(data[self.__index__]));
No newline at end of file
64
No newline at end of file
65
No newline at end of file
66
No newline at end of file
67 No newline at end of file
@@ -0,0 +1,72
1 '''
No newline at end of file
2 Created on Jan 12, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6
No newline at end of file
7 from primitives.wire import wire
No newline at end of file
8
No newline at end of file
9 class pout(object):
No newline at end of file
10 '''
No newline at end of file
11 classdocs
No newline at end of file
12 '''
No newline at end of file
13
No newline at end of file
14
No newline at end of file
15 def __init__(self, clk, wire_in=wire()):
No newline at end of file
16 '''
No newline at end of file
17 Constructor
No newline at end of file
18 '''
No newline at end of file
19 self.__wire_in__ = wire_in;
No newline at end of file
20 self.__data__ = [];
No newline at end of file
21
No newline at end of file
22 self.__clk__ = clk;
No newline at end of file
23 clk.connect_element(self);
No newline at end of file
24
No newline at end of file
25 def __initialization__(self):
No newline at end of file
26 pass;
No newline at end of file
27
No newline at end of file
28
No newline at end of file
29 def __next_sample__(self):
No newline at end of file
30 pass;
No newline at end of file
31
No newline at end of file
32
No newline at end of file
33 def __edge__(self):
No newline at end of file
34 pass;
No newline at end of file
35
No newline at end of file
36 def __stabilize__(self):
No newline at end of file
37 pass;
No newline at end of file
38
No newline at end of file
39
No newline at end of file
40 def __propagate__(self):
No newline at end of file
41 pass;
No newline at end of file
42
No newline at end of file
43
No newline at end of file
44 def __read_sample__(self):
No newline at end of file
45 self.__data__.append(float(self.__wire_in__.read()));
No newline at end of file
46
No newline at end of file
47
No newline at end of file
48 def get_data(self):
No newline at end of file
49 data = self.__data__;
No newline at end of file
50 self.__data__ = [];
No newline at end of file
51 return data;
No newline at end of file
52
No newline at end of file
53 if __name__=="__main__":
No newline at end of file
54 from primitives.clock import clock
No newline at end of file
55 from primitives.pin import pin
No newline at end of file
56
No newline at end of file
57 segnal = [float(i) for i in range(1,31)];
No newline at end of file
58 clk = clock();
No newline at end of file
59 sig0 = wire();
No newline at end of file
60
No newline at end of file
61 p_int = pin(clk,wire_out=sig0);
No newline at end of file
62 p_int.set_data(segnal);
No newline at end of file
63
No newline at end of file
64 p_out = pout(clk,wire_in=sig0);
No newline at end of file
65
No newline at end of file
66 print sig0.read();
No newline at end of file
67
No newline at end of file
68 for sig in segnal:
No newline at end of file
69 clk.tick();
No newline at end of file
70 print sig0.read();
No newline at end of file
71
No newline at end of file
72 print p_out.get_data() No newline at end of file
@@ -0,0 +1,60
1 '''
No newline at end of file
2 Created on Jan 6, 2015
No newline at end of file
3
No newline at end of file
4 @author: aras
No newline at end of file
5 '''
No newline at end of file
6 from decimal import *
No newline at end of file
7
No newline at end of file
8 class wire(object):
No newline at end of file
9 '''
No newline at end of file
10 classdocs
No newline at end of file
11 '''
No newline at end of file
12 wire_cnt = 0;
No newline at end of file
13 all_wires = {};
No newline at end of file
14
No newline at end of file
15 @staticmethod
No newline at end of file
16 def get_wires():
No newline at end of file
17 return wire.all_wires;
No newline at end of file
18
No newline at end of file
19 def __init__(self,initval=Decimal(0)):
No newline at end of file
20 '''
No newline at end of file
21 Constructor
No newline at end of file
22 '''
No newline at end of file
23 wire.wire_cnt += 1;
No newline at end of file
24
No newline at end of file
25 self.__wire_stt__ = initval;
No newline at end of file
26 self.__asyncs__ = [];
No newline at end of file
27
No newline at end of file
28 self.__wire_name__ = "__wire_"+str(wire.wire_cnt)+"__";
No newline at end of file
29 wire.all_wires[self.__wire_name__] = self;
No newline at end of file
30
No newline at end of file
31
No newline at end of file
32
No newline at end of file
33 def get_name(self):
No newline at end of file
34 return self.__wire_name__;
No newline at end of file
35
No newline at end of file
36 def drive(self, val):
No newline at end of file
37 self.__set_val__(val);
No newline at end of file
38 self.__update__();
No newline at end of file
39
No newline at end of file
40 def __set_val__(self,val):
No newline at end of file
41 self.__wire_stt__ = val;
No newline at end of file
42
No newline at end of file
43 def __update__(self):
No newline at end of file
44 for elem in self.__asyncs__:
No newline at end of file
45 elem.__update__();
No newline at end of file
46
No newline at end of file
47 def read(self):
No newline at end of file
48 return self.__wire_stt__;
No newline at end of file
49
No newline at end of file
50 def async_element(self,elem):
No newline at end of file
51 self.__asyncs__.append(elem);
No newline at end of file
52
No newline at end of file
53 if __name__=="__main__":
No newline at end of file
54 wi1 = wire(); print wire.wire_cnt
No newline at end of file
55 wi2 = wire(); print wire.wire_cnt
No newline at end of file
56 wi3 = wire(); print wire.wire_cnt
No newline at end of file
57 wi4 = wire(); print wire.wire_cnt
No newline at end of file
58 wi5 = wire(); print wire.wire_cnt
No newline at end of file
59 print wire.get_wires()
No newline at end of file
60 No newline at end of file
@@ -0,0 +1,49
1 '''
No newline at end of file
2 Created on Feb 16, 2015
No newline at end of file
3
No newline at end of file
4 @author: shinobi
No newline at end of file
5 '''
No newline at end of file
6 import obspy
No newline at end of file
7 from cic.mless_cic import cic_designer
No newline at end of file
8 from primitives.wire import wire
No newline at end of file
9 from primitives.clock import clock
No newline at end of file
10 from copy import copy
No newline at end of file
11 import numpy
No newline at end of file
12 from decimal import *
No newline at end of file
13
No newline at end of file
14 if __name__ == '__main__':
No newline at end of file
15 trace = obspy.read("./ENEFEB15/015930/PE.STPO..BHZ.MSEED");
No newline at end of file
16 #print trace[0].stats;
No newline at end of file
17 data = trace[0].data;
No newline at end of file
18 dat = copy(data);
No newline at end of file
19 dat.sort();
No newline at end of file
20 dc = dat[len(dat)/2];
No newline at end of file
21 #print dc
No newline at end of file
22 data = numpy.array(data,Decimal);
No newline at end of file
23 data = data -dc;
No newline at end of file
24 trace[0].data = data;
No newline at end of file
25 #trace.plot()
No newline at end of file
26 #print data
No newline at end of file
27
No newline at end of file
28 M = 10;
No newline at end of file
29 K = 5;
No newline at end of file
30 ro= 8*2;
No newline at end of file
31
No newline at end of file
32 dtsz = len(data); # cantidad de muestras de data original
No newline at end of file
33 print dtsz;
No newline at end of file
34 Fs = 100.0; # frecuencia de muestreo de data original
No newline at end of file
35
No newline at end of file
36 sig = numpy.array([0 for i in range(dtsz)]);
No newline at end of file
37 sig[0]=Decimal(1);
No newline at end of file
38
No newline at end of file
39 win = wire();
No newline at end of file
40 wout = wire();
No newline at end of file
41 clk = clock();
No newline at end of file
42
No newline at end of file
43 cic = cic_designer(M,K,ro, clk,win, wout);
No newline at end of file
44 cic.test_downsamples();
No newline at end of file
45 exit();
No newline at end of file
46 cic.simulate(data);
No newline at end of file
47 cic.plot_frequency_response(Fs);
No newline at end of file
48
No newline at end of file
49 No newline at end of file
@@ -5,15 +5,15
5 <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="de.innot.avreclipse.configuration.app.debug.2000262611" moduleId="org.eclipse.cdt.core.settings" name="Debug"> No newline at end of file
5 <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="de.innot.avreclipse.configuration.app.debug.2000262611" moduleId="org.eclipse.cdt.core.settings" name="Debug">
6 <externalSettings/> No newline at end of file
6 <externalSettings/>
7 <extensions>
7 <extensions>
No newline at end of file
8 <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> No newline at end of file
9 <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> No newline at end of file
8 <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
10 <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> No newline at end of file
9 <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
11 <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> No newline at end of file
10 <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
12 <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> No newline at end of file
11 <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
12 <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> No newline at end of file
13 </extensions> No newline at end of file
13 </extensions>
14 </storageModule> No newline at end of file
14 </storageModule>
15 <storageModule moduleId="cdtBuildSystem" version="4.0.0">
15 <storageModule moduleId="cdtBuildSystem" version="4.0.0">
No newline at end of file
16 <configuration artifactName="${ProjName}" buildArtefactType="de.innot.avreclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=de.innot.avreclipse.buildArtefactType.app" description="" id="de.innot.avreclipse.configuration.app.debug.2000262611" name="Debug" parent="de.innot.avreclipse.configuration.app.debug"> No newline at end of file
16 <configuration artifactName="${ProjName}" buildArtefactType="de.innot.avreclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=de.innot.avreclipse.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" id="de.innot.avreclipse.configuration.app.debug.2000262611" name="Debug" parent="de.innot.avreclipse.configuration.app.debug"> No newline at end of file
17 <folderInfo id="de.innot.avreclipse.configuration.app.debug.2000262611." name="/" resourcePath=""> No newline at end of file
17 <folderInfo id="de.innot.avreclipse.configuration.app.debug.2000262611." name="/" resourcePath="">
18 <toolChain id="de.innot.avreclipse.toolchain.winavr.app.debug.822649946" name="AVR-GCC Toolchain" superClass="de.innot.avreclipse.toolchain.winavr.app.debug"> No newline at end of file
18 <toolChain id="de.innot.avreclipse.toolchain.winavr.app.debug.822649946" name="AVR-GCC Toolchain" superClass="de.innot.avreclipse.toolchain.winavr.app.debug">
19 <option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.debug.2015112688" name="Generate HEX file for Flash memory" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.debug"/> No newline at end of file
19 <option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.debug.2015112688" name="Generate HEX file for Flash memory" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.debug"/>
@@ -7,23 +7,57
7 No newline at end of file
7
8 #ifndef POWERENGINED_POWERENGINED_H_ No newline at end of file
8 #ifndef POWERENGINED_POWERENGINED_H_
9 #define POWERENGINED_POWERENGINED_H_
9 #define POWERENGINED_POWERENGINED_H_
No newline at end of file
10 #include <avr/io.h> No newline at end of file
10 #include <inttypes.h> No newline at end of file
11 No newline at end of file
11
12 /* primitivas 1-wire transaction ds2438 . toda data/comandos es leida y escrita No newline at end of file
12 /* primitivas 1-wire transaction ds2438 . toda data/comandos es leida y escrita
13 * primero el bit menos significativo */ No newline at end of file
13 * primero el bit menos significativo */
14 No newline at end of file
14
15 No newline at end of file
15
16 No newline at end of file
16
17 /* Hardware definitions */
No newline at end of file
18 #define I2C_SLAVE_ADDR 0x26 No newline at end of file
17
19
No newline at end of file
20 #define DQ_BIT PB3
18 inline void write_0_signal();//pull-low, wait 15us, remain low 45us (min), release (high),wait 1us
No newline at end of file
No newline at end of file
21 #define DQ_PORT PORTB
19 inline void write_1_signal();//pull-low, wait 10us, release (high) 50us (min), remain high,wait 1us
No newline at end of file
No newline at end of file
22 #define DQ_PIN PINB
20 inline void write_byte(uint8_t byte); No newline at end of file
No newline at end of file
23 #define DQ_DDR DDRB
No newline at end of file
24
No newline at end of file
25 /* DS2438Z definitions */
No newline at end of file
26 #define READ_ROM 0X33
No newline at end of file
27 #define MATCH_ROM 0x55
No newline at end of file
28 #define SEARCH_ROM 0xF0
No newline at end of file
29 #define SKIP_ROM 0xCC
No newline at end of file
30 #define WRITE_SP 0x4E
No newline at end of file
31 #define READ_SP 0xBE
No newline at end of file
32 #define COPY_SP 0x48
No newline at end of file
33 #define CONV_T 0x44
No newline at end of file
34 #define CONV_V 0xB4
No newline at end of file
35 #define RCALL_MEM 0xB8
No newline at end of file
36
No newline at end of file
37
No newline at end of file
38 /* DS2438Z Memory Pages (ver datasheet) */
No newline at end of file
39 #define PAGE_0 0x00
No newline at end of file
40 #define PAGE_1 0x01
No newline at end of file
41 #define PAGE_2 0x02
No newline at end of file
42 #define PAGE_3 0x03
No newline at end of file
43 #define PAGE_4 0x04
No newline at end of file
44 #define PAGE_5 0x05
No newline at end of file
45 #define PAGE_6 0x06
No newline at end of file
46 #define PAGE_7 0x07
No newline at end of file
47
No newline at end of file
48
No newline at end of file
49
No newline at end of file
50
No newline at end of file
51 /* Funciones de escritura */
No newline at end of file
52 void write_0_signal();//pull-low, wait 15us, remain low 45us (min), release (high),wait 1us
No newline at end of file
53 void write_1_signal();//pull-low, wait 10us, release (high) 50us (min), remain high,wait 1us
No newline at end of file
54 void write_byte(uint8_t byte); No newline at end of file
21 void write_bytes(uint8_t* pbytes,uint8_t len); No newline at end of file
55 void write_bytes(uint8_t* pbytes,uint8_t len);
22
56
No newline at end of file
57 /* Funciones de lectura */
23
No newline at end of file
No newline at end of file
58 uint8_t read_signal();//pull-low, wait 1us, release, pin I , wait 9us, read line, No newline at end of file
24 inline uint8_t read_signal();//pull-low, wait 1us, release, pin I , wait 9us, read line, No newline at end of file
25 //wait 50us(min), pin O, wait 1us
59 //wait 50us(min), pin O, wait 1us
No newline at end of file
60 uint8_t read_byte(); No newline at end of file
26 inline uint8_t read_byte(); No newline at end of file
27 void read_bytes(uint8_t* pbytes, uint8_t len); No newline at end of file
61 void read_bytes(uint8_t* pbytes, uint8_t len);
28 No newline at end of file
62
29 No newline at end of file
63
@@ -9,7 +9,7
9 No newline at end of file
9
10 channel::channel(): No newline at end of file
10 channel::channel():
11 chn_id(0),chn_name{"\0"},chn_gain(0),
11 chn_id(0),chn_name{"\0"},chn_gain(0),
No newline at end of file
12 chn_datarate(0),chn_status(0) No newline at end of file
12 chn_baudrate(0),chn_status(0) No newline at end of file
13 { No newline at end of file
13 {
14 // TODO Auto-generated constructor stub No newline at end of file
14 // TODO Auto-generated constructor stub
15 No newline at end of file
15
@@ -8,7 +8,7
8 #include "processEnginectrl.h" No newline at end of file
8 #include "processEnginectrl.h"
9 No newline at end of file
9
10 processEngine_ctrl::processEngine_ctrl():
10 processEngine_ctrl::processEngine_ctrl():
No newline at end of file
11 pdtpkg(nullptr),pe_chns(nullptr),conf_dir(nullptr){ No newline at end of file
11 pdtpkg(nullptr),pe_chns(nullptr){ No newline at end of file
12 // TODO Auto-generated constructor stub No newline at end of file
12 // TODO Auto-generated constructor stub
13 No newline at end of file
13
14 } No newline at end of file
14 }
General Comments 0
You need to be logged in to leave comments. Login now