From 19bd37a530f4a31b5ebb16eb1247e40b66f13e5d Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 4 May 2011 02:16:08 +0200 Subject: [PATCH] more fixes --- _repo/moduleb-circuit-nobulb.svg | 205 ++++++++++++++++++++++++++++ firmware/src/adc.c | 8 ++ software/modules/ModuleA.py | 9 +- software/modules/ModuleB-nobulb.png | Bin 0 -> 3682 bytes software/modules/ModuleB.py | 14 +- software/modules/ModuleC.py | 71 ++++++---- software/modules/ModuleC.ui | 36 ++--- 7 files changed, 285 insertions(+), 58 deletions(-) create mode 100644 _repo/moduleb-circuit-nobulb.svg create mode 100644 software/modules/ModuleB-nobulb.png diff --git a/_repo/moduleb-circuit-nobulb.svg b/_repo/moduleb-circuit-nobulb.svg new file mode 100644 index 0000000..a20ee08 --- /dev/null +++ b/_repo/moduleb-circuit-nobulb.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + SRG8 + + + + + + + + + + + + + + + + + + diff --git a/firmware/src/adc.c b/firmware/src/adc.c index a6d7bd6..f45ce3e 100644 --- a/firmware/src/adc.c +++ b/firmware/src/adc.c @@ -160,21 +160,29 @@ void ADCInit( uint32_t ADC_Clk ) to design team. */ LPC_IOCON->PIO0_11 &= ~0x8F; /* ADC I/O config */ LPC_IOCON->PIO0_11 |= 0x02; /* ADC IN0 */ + LPC_IOCON->PIO0_11 |= 1<<3; /* ADC IN0 -- pulldown */ #if 1 LPC_IOCON->PIO1_0 &= ~0x8F; LPC_IOCON->PIO1_0 |= 0x02; /* ADC IN1 */ + LPC_IOCON->PIO1_0 |= 1<<3; /* ADC IN1 -- pulldown */ LPC_IOCON->PIO1_1 &= ~0x8F; LPC_IOCON->PIO1_1 |= 0x02; /* ADC IN2 */ + LPC_IOCON->PIO1_1 |= 1<<3; /* ADC IN2 -- pulldown */ LPC_IOCON->PIO1_2 &= ~0x8F; LPC_IOCON->PIO1_2 |= 0x02; /* ADC IN3 */ + LPC_IOCON->PIO1_2 |= 1<<3; /* ADC IN3 -- pulldown */ LPC_IOCON->PIO1_3 &= ~0x8F; LPC_IOCON->PIO1_3 |= 0x02; /* ADC IN4 */ + LPC_IOCON->PIO1_3 |= 1<<3; /* ADC IN4 -- pulldown */ LPC_IOCON->PIO1_4 &= ~0x8F; /* Clear bit7, change to analog mode. */ LPC_IOCON->PIO1_4 |= 0x01; /* ADC IN5 */ + LPC_IOCON->PIO1_4 |= 1<<3; /* ADC IN5 -- pulldown */ LPC_IOCON->PIO1_10 &= ~0x8F; /* Clear bit7, change to analog mode. */ LPC_IOCON->PIO1_10 |= 0x01; /* ADC IN6 */ + LPC_IOCON->PIO1_10 |= 1<<3; /* ADC IN6 -- pulldown */ LPC_IOCON->PIO1_11 &= ~0x8F; /* Clear bit7, change to analog mode. */ LPC_IOCON->PIO1_11 |= 0x01; /* ADC IN7 */ + LPC_IOCON->PIO1_11 |= 1<<3; /* ADC IN7 -- pulldown */ #endif LPC_ADC->CR = ( 0x01 << 0 ) | /* SEL=1,select channel 0~7 on ADC0 */ diff --git a/software/modules/ModuleA.py b/software/modules/ModuleA.py index 683f6d0..cb02400 100644 --- a/software/modules/ModuleA.py +++ b/software/modules/ModuleA.py @@ -24,10 +24,8 @@ class ModuleAWidget(QWidget): def read_inputs(self): r = self.dev.read() - u = r[1]/1023.0 * 3.3 - 0.19 - if u < 0: - u = 0 - self.dev.pwm(1, int(u*65536/3)) + u = r[1]/1023.0 * 3.3 + self.dev.pwm(1, int(u*65536.0/3.3)) self.ui.labelU.setText('%0.3f V' % u) self.ui.progressU.setValue(1000*u) self.data.pop(0) @@ -53,7 +51,7 @@ class ModuleAWidget(QWidget): self.scene.addSimpleText('1.0').moveBy(-40, 300-10) self.scene.addSimpleText('0.5').moveBy(-40, 350-10) self.scene.addSimpleText('0.0').moveBy(-40, 400-10) - self.scene.addSimpleText('[U]').moveBy(-39, 430-10) + self.scene.addSimpleText('[U/V]').moveBy(-39, 430-10) path = QPainterPath() path.moveTo(0,400-self.data[0]*100) for i in xrange(1,200): @@ -70,6 +68,7 @@ class ModuleA(): def start(self): self.widget.dev = Device() self.widget.timer.start(40) + self.widget.data = 200*[0.0] def stop(self): self.widget.timer.stop() diff --git a/software/modules/ModuleB-nobulb.png b/software/modules/ModuleB-nobulb.png new file mode 100644 index 0000000000000000000000000000000000000000..ec8301f35aede03dfb6492b0634a0563b68273eb GIT binary patch literal 3682 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 literal 0 HcmV?d00001 diff --git a/software/modules/ModuleB.py b/software/modules/ModuleB.py index 1a7a042..168cada 100644 --- a/software/modules/ModuleB.py +++ b/software/modules/ModuleB.py @@ -24,16 +24,14 @@ class ModuleBWidget(QWidget): self.scene_off.addPixmap(QPixmap('modules/ModuleB-off.png')) self.scene_on = QGraphicsScene() self.scene_on.addPixmap(QPixmap('modules/ModuleB-on.png')) + self.scene_nobulb = QGraphicsScene() + self.scene_nobulb.addPixmap(QPixmap('modules/ModuleB-nobulb.png')) self.ui.widgetImg.setScene(self.scene_nobat) def read_inputs(self): r = self.dev.read() - us = r[1]/1023.0 * 3.3 - 0.095 - if us < 0.0: - us = 0.0 - uc = r[2]/1023.0 * 3.3 - 0.04 - if uc < 0.0: - uc = 0.0 + us = r[1]/1023.0 * 3.3 + uc = r[2]/1023.0 * 3.3 i = (us-uc)/18*1000 if i < 0.0 or uc == 0.0: i = 0.0 @@ -43,8 +41,10 @@ class ModuleBWidget(QWidget): if us < 1.5: self.ui.widgetImg.setScene(self.scene_nobat) else: - if uc < 1: + if uc < 0.9: self.ui.widgetImg.setScene(self.scene_off) + elif uc > 2.0: + self.ui.widgetImg.setScene(self.scene_nobulb) else: self.ui.widgetImg.setScene(self.scene_on) diff --git a/software/modules/ModuleC.py b/software/modules/ModuleC.py index b09d480..3ab88c9 100644 --- a/software/modules/ModuleC.py +++ b/software/modules/ModuleC.py @@ -20,10 +20,11 @@ class ModuleCWidget(QWidget): self.timer = QTimer() QObject.connect(self.timer, SIGNAL("timeout()"), self.read_inputs) - self.data1 = 200*[0.0] - self.data2 = 200*[0.0] + self.datau = 200*[0.0] + self.datai = 200*[0.0] + self.current = 0 - self.mode = ['DC', 'L'] + self.mode = ['DC', 'C'] @pyqtSlot() def on_radioAC_clicked(self): @@ -54,6 +55,7 @@ class ModuleCWidget(QWidget): def on_btnStart_clicked(self): self.ui.btnStart.setEnabled(False) self.ui.btnStop.setEnabled(True) + self.current = 3.3 if self.mode == ['DC', 'L']: self.dev.setout(1, 1) if self.mode == ['DC', 'C']: @@ -65,6 +67,7 @@ class ModuleCWidget(QWidget): def on_btnStop_clicked(self): self.ui.btnStart.setEnabled(True) self.ui.btnStop.setEnabled(False) + self.current = 0.0 if self.mode == ['DC', 'L']: self.dev.setout(1, 0) if self.mode == ['DC', 'C']: @@ -73,45 +76,55 @@ class ModuleCWidget(QWidget): self.dev.setout(3, 0) def setup_hw(self): - if self.mode == ['DC', 'L']: - self.dev.switches(1<<0) - if self.mode == ['DC', 'C']: - self.dev.switches(1<<1) - if self.mode == ['DC', 'LC']: + if self.mode == ['DC', 'L']: # AD6 + self.dev.switches(1<<5) + self.dev.opamp(2, 5, 0) + if self.mode == ['DC', 'C']: # AD5 + self.dev.switches(1<<4) + self.dev.opamp(2, 4, 0) + if self.mode == ['DC', 'LC']: # AD3 self.dev.switches(1<<2) + self.dev.opamp(2, 2, 0) def setup_scene(self, scene): - scene.addLine(-5, 200-0, 610, 200-0) + scene.addLine(-5, 100-0, 605, 100-0) scene.addLine(0, 200+5, 0, 200-205) - scene.addLine(-5, 200- 50, 10, 200- 50) - scene.addLine(-5, 200-100, 10, 200-100) - scene.addLine(-5, 200-150, 10, 200-150) - scene.addSimpleText('4.0').moveBy(-40, 0-10) - scene.addSimpleText('3.0').moveBy(-40, 50-10) - scene.addSimpleText('2.0').moveBy(-40, 100-10) - scene.addSimpleText('1.0').moveBy(-40, 150-10) - scene.addSimpleText('0.0').moveBy(-40, 200-10) + scene.addLine(-5, 200- 0, 5, 200- 0) + scene.addLine(-5, 200- 50, 5, 200- 50) + scene.addLine(-5, 200-100, 5, 200-100) + scene.addLine(-5, 200-150, 5, 200-150) + scene.addLine(-5, 200-200, 5, 200-200) def tick_DC(self, u, i): - self.data1.pop(0) - self.data2.pop(0) - self.data1.append(u) - self.data2.append(i) + self.datau.pop(0) + self.datai.pop(0) + self.datau.append(u) + self.datai.append(i) self.scene1 = QGraphicsScene() self.scene2 = QGraphicsScene() self.setup_scene(self.scene1) self.setup_scene(self.scene2) - self.scene1.addSimpleText('[U]').moveBy(-39, 220-10) - self.scene2.addSimpleText('[I]').moveBy(-39, 220-10) + self.scene1.addSimpleText('[U/V]').moveBy(-39, 220-10) + self.scene2.addSimpleText('[I/mA]').moveBy(-39, 220-10) + self.scene1.addSimpleText('+4.0').moveBy(-40, 0-10) + self.scene1.addSimpleText('+2.0').moveBy(-40, 50-10) + self.scene1.addSimpleText(' 0.0').moveBy(-40, 100-10) + self.scene1.addSimpleText('-2.0').moveBy(-40, 150-10) + self.scene1.addSimpleText('-4.0').moveBy(-40, 200-10) + self.scene2.addSimpleText('+0.4').moveBy(-40, 0-10) + self.scene2.addSimpleText('+0.2').moveBy(-40, 50-10) + self.scene2.addSimpleText(' 0.0').moveBy(-40, 100-10) + self.scene2.addSimpleText('-0.2').moveBy(-40, 150-10) + self.scene2.addSimpleText('-0.4').moveBy(-40, 200-10) path = QPainterPath() - path.moveTo(0,200-self.data1[0]*50) + path.moveTo(0,100-self.datau[0]*25) for i in xrange(1,200): - path.lineTo(3*(i+1), 200-self.data1[i]*50) + path.lineTo(3*(i+1), 100-self.datau[i]*25) self.scene1.addPath(path, QPen(QColor(0,0,255), 3)) path = QPainterPath() - path.moveTo(0,200-self.data2[0]*50) + path.moveTo(0,100-self.datai[0]*25) for i in xrange(1,200): - path.lineTo(3*(i+1), 200-self.data2[i]*50) + path.lineTo(3*(i+1), 100-self.datai[i]*25) self.scene2.addPath(path, QPen(QColor(0,0,255), 3)) self.ui.graph1.setScene(self.scene1) self.ui.graph2.setScene(self.scene2) @@ -121,7 +134,7 @@ class ModuleCWidget(QWidget): if self.mode[0] == 'DC': u = r[0]/1023.0 * 3.3 # TODO: change this if we change opamp - i = 1 # TODO: read real current + i = self.current - r[0]/1023.0 * 3.3 self.tick_DC(u, i) class ModuleC(): @@ -134,6 +147,8 @@ class ModuleC(): self.widget.dev = Device() self.widget.setup_hw() self.widget.timer.start(25) + self.widget.datau = 200*[0.0] + self.widget.datai = 200*[0.0] def stop(self): self.widget.timer.stop() diff --git a/software/modules/ModuleC.ui b/software/modules/ModuleC.ui index 9a8053f..a15fcdf 100644 --- a/software/modules/ModuleC.ui +++ b/software/modules/ModuleC.ui @@ -87,7 +87,7 @@ Mode - + 10 @@ -96,27 +96,11 @@ 26 - - L - - - true - - - - - - 10 - 60 - 51 - 26 - - C - false + true @@ -135,6 +119,22 @@ false + + + + 10 + 60 + 51 + 26 + + + + L + + + false + +