Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ПОДВЕСТИ 5ВОЛЬТ!!!
- /*
- Программа-демонстрация управления ваттметром М3-22А с микроконтроллера.
- Установка режима управления происходит через микросхему pcf8475A с адресом 56 на шине i2c, где:
- отсчёт битов в формате Вхххххххх идёт СПРАВА НАЛЕВО.
- нумерация битов совпадает с нумерацией выходов P0-P7 в pcf.
- 0бит (ЛСБ) - нуль для включения управления контроллером (4 контакт на разъёме м3-22а)
- 1 - не распаян
- 2 - не распаян
- 3 - не распаян
- 4 - установка предела 2 (7 контакт)
- 5 - установка предела 1 (6 контакт) (коды пределов: 11 - 10мвт, 00 - 10мквт, 10 - 1мВт, 01 - 100мкВт)
- 6 - (24 контакт) если единица, то включает режим автоматического выбора предела на ваттметре
- 7(МСБ) - (5 контакт) устанавливает нуль на индикаторе автоматически когда подан нуль
- распиновка розетки м3-22а (РПМ7-36Г), вид ззади:
- _________________
- \35-33-....-3-1 /
- \36-34-...-4-2/
- \___________/
- 1 контакт - питание +5В микросхем , но лучше питаться автономно, т.к. выключение м322 сбрасывает конфигурацию выходов пцф
- 2 контакт - 2мс синхроимпульс отрицательной полярности, во время которого надо считывать данные
- можно повесить на прерывание, но хватает и скорости обычного digitalRead()
- скорость считывания мощности ограничивается 5 синхроимпульсами в секунду.
- 25 и 27 контакты - корпус
- Пцфки с адресами 57 и 58 отвечают за збор данных
- пцф57 :
- 0 и 1 бит - контакты 8 и 9 соответствуют коду предела для считывания в режиме автопредела
- (11 - 10мвт, 00 - 10мквт, 10 - 1мвт, 01 - 100мквт)
- 2 и 3 бит - 34 и 23 контакты - полярность и единица старшего (I) разряда
- 4-7 бит - 18, 19, 21 и 22 контакты - BCD-код II разряда (который в описании ошибочно обозначен как IV)
- пцф58:
- 0-3 бит - 17-14 контакты, BCD-код третьего разряда
- 4-7 бит - 10-13 контакты, BCD-код младшего IV разряда, обозначенного в схеме как II.
- */
- #include <Wire.h>
- byte pcf57 = B00000000;
- byte pcf58 = B00000000;
- int i, j, I, II, III, IV;
- boolean KP1, KP2;
- //===================================================================================================
- void setup() {
- Wire.begin();
- Serial.begin(9600);
- pinMode(2, INPUT_PULLUP);
- }
- //===================================================================================================
- void loop() {
- Wire.beginTransmission(57);
- Wire.write(B11111111);
- Serial.print(Wire.endTransmission());
- Wire.beginTransmission(58);
- Wire.write(B11111111);
- Serial.print(Wire.endTransmission());
- //===================================================================================================
- // просто чтение на пределе 10мВт
- Wire.beginTransmission(56);
- Wire.write(B10110000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 10mW SCALE");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- Serial.print(",");
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- Serial.println("mW");
- delay(1000);
- }
- //===================================================================================================
- //установка предела 1мВт и чтение
- Wire.beginTransmission(56);
- Wire.write(B10100000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 1mW SCALE");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- Serial.print(",");
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- Serial.println("mW");
- delay(1000);
- }
- //===================================================================================================
- // установка предела 100мквт и чтение
- Wire.beginTransmission(56);
- Wire.write(B10010000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 100uW SCALE");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- Serial.print(",");
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- Serial.println("uW");
- delay(1000);
- }
- //===================================================================================================
- // установка предела 10мквт и чтение
- Wire.beginTransmission(56);
- Wire.write(B10000000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 10uW SCALE");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- Serial.print(",");
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- Serial.println("uW");
- delay(1000);
- }
- //===================================================================================================
- //установка предела 10мкВт c автоустановкой нуля
- //автоустановка работает только в режиме кнопки измерений
- Wire.beginTransmission(56);
- Wire.write(B10000000);
- Serial.println(Wire.endTransmission());
- Serial.println("SETTING 10uW SCALE");
- delay(1000);
- Wire.beginTransmission(56);
- Wire.write(B00000000);
- Serial.println(Wire.endTransmission());
- Serial.println("AutoSETTING ZERO...");
- delay(10000);
- Wire.beginTransmission(56);
- Wire.write(B10000000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 10uW SCALE");
- Serial.println("REMOTE CONTROL ENABLED");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- Serial.print(",");
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- Serial.println("uW");
- delay(1000);
- }
- //===================================================================================================
- //просто отключение дистанционного управления (для установки нуля потенциометром).
- Wire.beginTransmission(56);
- Wire.write(B10110001);
- Serial.println(Wire.endTransmission());
- Serial.println("REMOTE CONTROL DISABLED");
- delay(10000);
- //===================================================================================================
- //настройка на автоустановку и чтение предела
- Wire.beginTransmission(56);
- Wire.write(B11110000);
- Serial.println(Wire.endTransmission());
- Serial.println("AutoSCALE FEATURE");
- delay(2000);
- for (i = 0; i<10; i++) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- KP1 = bitRead(pcf57,0);
- KP2 = bitRead(pcf57,1);
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- if (!KP1 & KP2) {
- Serial.print(",");
- };
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- if ( (KP1 & KP2) | (!KP1 & !KP2) ) {
- Serial.print(",");
- };
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- if (KP1 & !KP2) {
- Serial.print(",");
- };
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- if ( (KP1 & KP2) | (!KP1 & KP2) ) {
- Serial.println("mW");
- }
- else {
- Serial.println("uW");
- };
- delay(1000);
- }
- //===================================================================================================
- //установка предела c автоустановкой нуля
- //автоустановка работает только в режиме кнопки измерений
- Wire.beginTransmission(56);
- Wire.write(B11110000);
- Serial.println(Wire.endTransmission());
- Serial.println("AutoSCALE");
- delay(1000);
- Wire.beginTransmission(56);
- Wire.write(B01110000);
- Serial.println(Wire.endTransmission());
- Serial.println("AutoSETTING ZERO...");
- delay(10000);
- Wire.beginTransmission(56);
- Wire.write(B11110000);
- Serial.println(Wire.endTransmission());
- Serial.println("READING 10uW SCALE");
- Serial.println("REMOTE CONTROL ENABLED");
- //===================================================================================================
- //бесконечный цикл на автопределе
- while ( true ) {
- while( (digitalRead(2)) ) {
- continue ;
- };
- Wire.requestFrom(57,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf57 = Wire.read();
- };
- };
- Wire.requestFrom(58,1);
- for (j = 0; j<100; j++) {
- if (Wire.available()) {
- pcf58= Wire.read();
- };
- };
- KP1 = bitRead(pcf57,0);
- KP2 = bitRead(pcf57,1);
- if ( bitRead(pcf57,2) ) {
- Serial.print("+");
- }
- else {
- Serial.print("-");
- };
- I = bitRead(pcf57,3);
- Serial.print(I);
- if (!KP1 & KP2) {
- Serial.print(",");
- };
- II = bitRead(pcf57,4) + bitRead(pcf57,5) * 2 + bitRead(pcf57,6) * 4 + bitRead(pcf57,7) * 8 ;
- Serial.print(II);
- if ( (KP1 & KP2) | (!KP1 & !KP2) ) {
- Serial.print(",");
- };
- III = bitRead(pcf58,3) + bitRead(pcf58,2) * 2 + bitRead(pcf58,1) * 4 + bitRead(pcf58,0) * 8 ;
- Serial.print(III);
- if (KP1 & !KP2) {
- Serial.print(",");
- };
- IV = bitRead(pcf58,4) + bitRead(pcf58,5) * 2 + bitRead(pcf58,6) * 4 + bitRead(pcf58,7) * 8 ;
- Serial.print(IV);
- if ( (KP1 & KP2) | (!KP1 & KP2) ) {
- Serial.println("mW");
- }
- else {
- Serial.println("uW");
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement