DIY Simple 20 kHz Arduino Oscilloscope on Nokia 5110 LCD çalışıyor mu?

Başlatan silver_wolf, 19 Kasım 2021, 05:32:09

silver_wolf

DIY Simple 20 kHz Arduino Oscilloscope on Nokia 5110 LCD - Arduino Project Hub
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);//CLK,DIN,DC,CE,RST |||| VCC +3.3 V , BL ++ 200 OM ++ 3.3 V
 
int izm,x,y,u,i2,zz,hold,h0,h1,h2,raz=0,menu,sss=512,u_dig,data[168]{};
unsigned long time,times;
float per;
byte i;
 
void setup() {Serial.begin(9600);
    display.begin();display.clearDisplay();display.display();
    display.setContrast(40); // contrast setting
    display.setTextSize(1);  // setting font size
    display.setTextColor(BLACK); // setting text color
    pinMode(10,INPUT);  // +
    pinMode(11,INPUT);  // -
    pinMode(12,INPUT);  // hold
    pinMode(13,INPUT);  // синх
    ADMUX  = 0b01000000; // 0B0100000 10 bit A0 // 0B01100000 8 bit A0
    ADCSRA = 0b11110010;// CLK/4;
    analogWrite (9, 127); // PWM 9 OUTPUT
}
 
void loop() {
///////////////////////////BUTTON CONTROL//////////////////////////////
 if(menu==0){
  if(digitalRead(10)==HIGH){if(hold==0){raz++;}if(hold==1){i2=i2+1;}delay(100);}
  if(digitalRead(11)==HIGH){if(hold==0){raz--;}if(hold==1&&hold>0){i2=i2-1;}delay(100);}
  }
  if(digitalRead(12)==HIGH){hold++;i2=0;delay(100);}
  if(digitalRead(13)==HIGH){menu++;delay(100);}
  if(hold>1){hold=0;}if(menu>1||menu<0){menu=0;}
  if(raz<=0){raz=0;}if(raz>8){raz=8;}
  if(menu==1){hold=0;
  if(digitalRead(10)==HIGH){sss+=24;delay(100);}
  if(digitalRead(11)==HIGH){sss-=24;delay(100);}
  if(sss>1023){sss=1023;}if(sss<0){sss=0;}
  }
   display.setCursor(0,0); // setting cursor position
/////////////////////////SWEEP TIME calibrated by generator ////////////////////////////
  if(raz==0){zz=1;h2=2;per=0.1;}
  if(raz==1){zz=1;h2=1;per=0.2;}
  if(raz==2){zz=12;h2=1;per=0.5;}
  if(raz==3){zz=32;h2=1;per=1;}
  if(raz==4){zz=75;h2=1;per=2;}
  if(raz==5){zz=200;h2=1;per=5;}
  if(raz==6){zz=380;h2=1;per=10;}
  if(raz==7){zz=750;h2=1;per=20;}
  if(raz==8){zz=1900;h2=1;per=50;}
///////////////////////////////////////////////////////////////////
 if(hold==0&&millis()-time>0){
 
 ads();while(izm<sss){ads();h0++;if(h0>5000){break;}}h0=0;// SYNCHRONIZATION
 times=micros();
 while(i<167){i++;delayMicroseconds(zz);
  ads();data[i]=izm; // MEASUREMENT 10 bit
  }i=0;times=micros()-times;
  Serial.println(times);
 }
////////////////////OUTPUT ON DISPLAY///////////////////////////////
  if(millis()-time>100){
    display.clearDisplay();
    if(sss<204&&sss>100){u_dig=10;display.setCursor(0,40);display.print("0.4V");}
    else if(sss<100){u_dig=5; display.setCursor(0,40);display.print("0.2V");}
    else{u_dig=25;}
     display.setCursor(0,0);
 while(i<167){i++;setka();
    display.drawLine(i*h2-i2, 47-data[i]/u_dig,i*h2-i2+h2-1, 47-data[i+1]/u_dig, BLACK);}i=0;
    display.print(per,1);display.print(" mS  ");
  if(menu==0){if(hold==1){display.print("HOLD   ");}else{display.print("AUTO   ");}}
  if(menu==1){display.print(sss/200.0,1);display.print(" V ");}
  if(menu==1){display.drawLine(0, 48-sss/u_dig,4, 48-sss/u_dig, BLACK);}
    time=millis();
}
   display.display();    
}// loop
 
void ads(){ //////// 10 bit ///////////
  do{ADCSRA |= (1 << ADSC);} 
  while((ADCSRA & (1 << ADIF)) == 0);izm = (ADCL|ADCH << 8);} 
  ////////////////// 8 bit ///////////
  // REQUIRED ALL CHANGEABLE VARIABLES (sss, u_dig)
  // while ((ADCSRA & 0x10)==0);
  //   ADCSRA|=0x10;
  //   izm = ADCH;
 
void setka(){
 for(y=8;y<47;y=y+8){
 for(x=0;x<83;x=x+4){
   display.drawPixel(x, y, BLACK);}}
 
 for(x=0;x<83;x=x+26){
 for(y=10;y<47;y=y+4){
   display.drawPixel(x, y, BLACK);}}
}
Şeması:


Kaynak: https://create.arduino.cc/projecthub/mircemk/diy-simple-20-khz-arduino-oscilloscope-on-nokia-5110-lcd-da4833

Selam Arkadaşlar;

Yukarıdaki 20kHz kendin yap(DIY) osiloskop projesi isis'te düzgün çalışmadı.
 
Benim bulabildiğim çalışmasını etkileyecek BUG'lar
1) Video'da butonlara Pull-Down diyor ve yazılımda Pull-Down ama verdiği şemada Pull-Up butonlar var.
2) Şema ile yazılımda + ve - butonlarının portları farklı.

+) Yazılımda D9 pininde osiloskobu test edebilecek frekans kaynağı var ama şemada yok. Ve video'daki cihazda görünmüyor.

Başka düzgün çalışmasını engelecek ne gibi BUG'lar var? Eğer başka BUG varsa yazın lütfen.

uzaylivolkan

Arduino osilaskop


  bu linkteki proje güzel ve çalışıyor.


silver_wolf

#3
Alıntı yapılan: uzaylivolkan - 19 Kasım 2021, 11:17:24Arduino osilaskop


  bu linkteki proje güzel ve çalışıyor.

Selam @uzaylivolkan;
Yardımın için teşekkür ederim. Verdiğin linkteki projeyi Arduino 1.6.5'te derleyipte HEX'i isis'te denedim. Frekans jenerator kısmı çalışıyor. Ben de  Protoboard'ta deneyeyim dedim ama "avrdude: ser_open(): can't open device "\\.\COM3": Erişim engellendi." hatasını aldım. Bu problem nasıl çözülüyor?


Alıntı yapılan: parametre - 19 Kasım 2021, 16:29:56Bu resımdekini uyguladı mı onemli
https://3.bp.blogspot.com/-f6PNaVU2kuQ/WUl4lgmdreI/AAAAAAAAOYU/EEM6zQTXytw-lMlBIOG2bUuyGdk36cn8QCLcBGAs/s1600/Contrast.PNG
Selam @parametre;
O kısmı eklemedim. Programda EEPROM kısmını aşağıdaki şekildeydi. Ben de müdahele etmedim. isis'te görüntü aldım. Ama eğer arduino nano'ya yükleyebilirsem ve siyah ekran alırsam deneyeceğim. Yardımın için teşekkür ederim.

if ( EEPROM.read(cof) != cof ) {
      EEPROM.write(cof, cof);
      EEPROM.write(1, 60);
      EEPROM.write(2, 1);
  } else {
      contrast = EEPROM.read(1);
      BL      = EEPROM.read(2);
  }
  pinMode(Ekran, OUTPUT);
  digitalWrite(Ekran, BL);

Edit: Orjinal Arduino UNO' program düzgün çalışıyor. Fakat clon NANO'lara Arduino 1.6.5 IDE'si ile yükleme yapamadım. CH340 driver'ini Arduino IDE 1.8.16'ya tanıttım ama Arduino IDE  1.6.5'e tanıtanadım.
Bir de Ekran karanlık çıktı. Resimdeki kodla düzeldi. Ve yazılmdaki "EEPROM.write(1, 60);" "EEPROM.write(1, 50);" ile değiştirdim.