Простой осциллограф на Arduino Nano (Uno) + TLC5540 + TFT-дисплей SPI 320×240

Ранее на странице http://rcl-radio.ru/?p=63088 рассматривался пример создания осциллографа с использованием быстродействующего АЦП TLC5540 с выводом информации на LCD дисплей 84×48 Nokia 5110. На этой странице показан пример аналогичного осциллографа, но с использованием TFT-дисплея SPI 320×240 на контроллере ILI9341C.

TLC5540 — представляет собой быстродействующий 8 битный АЦП, который осуществляет преобразование с производительностью до 40 MSPS. Тактовые импульсы для АЦП поступают с 9 цифрового выхода Arduino. Частота тактовых импульсов 8 МГц. Полоса пропускания осциллографа до 500 кГц, при частоте входного сигнала выше 500 кГц форма сигнала сильно искажается, поэтому на последнем пределе развертки 0,002 мкс применена программная обработка данных АЦП, которая позволяет отображать на экране логический уровень входного сигнала (любая форма сигнала преобразуется в импульсы).

Максимальное напряжение (только положительное) АЦП TLC5540 2.28 В (перегруз до напряжения питания), поэтому на входе АЦП необходим делитель напряжения. Показанный на схеме делитель напряжения позволяет осциллографу работать с сигналом уровня TTL. Порт PORTC Aduino имеет контакты А0…А5, хотя АЦП TLC5540 8 бит, можно использовать только 6 бит порта Arduino, поэтому два младших бита АЦП TLC5540 не используются. В итоге в процессе преобразования аналогового напряжения в цифровое значение можно получить числа от 0 до 63.

Управление осциллографом очень простое, кнопками «+» и «-» можно менять период развертки, а кнопка «HOLD» «замораживает» изображение, в режиме «HOLD» кнопками «+» и «-» можно двигать по горизонтали изображение осциллограммы (два полных экрана).

Библиотека — UTFT (1).zip

#include <UTFT.h>
#include <EEPROM.h>
UTFT myGLCD(DMTFT28105, 8, 7, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC
extern uint8_t SmallFont[];
 
  int i,x,y,raz,hold,hh,sek,fff;
  unsigned long time;
  float times;
  int h0,h1,w=1,w2=1;
  byte data[640],data_old[640],arr_max=0,arr_min=255,arr_sum,arr;
 
void setup(){
  myGLCD.InitLCD(1);myGLCD.clrScr();myGLCD.setFont(SmallFont);
    pinMode(4,INPUT); ///  +++
    pinMode(3,INPUT); ///  ---
    pinMode(2,INPUT); /// hold
    pinMode(9, OUTPUT);
    raz = EEPROM.read(0);
    TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 0;
}
void loop(){
     if(digitalRead(2)==HIGH){hold++;hh=0;w2=0;if(hold>1){hold=0;}delay(200);}
   if(digitalRead(4)==HIGH&&hold==1){hh=hh+5;if(hh>320){hh=320;}delay(200);}
   if(digitalRead(3)==HIGH&&hold==1){hh=hh-5;if(hh<0){hh=0;}delay(200);}
   if(digitalRead(4)==HIGH&&hold==0){raz++;myGLCD.setColor(0,0,0);
  myGLCD.fillRect(0,34,320,230);hh=0;w=1;if(raz>13){raz=13;}delay(200);}
   if(digitalRead(3)==HIGH&&hold==0){raz--;myGLCD.setColor(0,0,0);
  myGLCD.fillRect(0,34,320,230);hh=0;w=1;if(raz<0){raz=0;}delay(200);}
 
 ////////////////////// ИЗМЕРЕНИЕ /////////////////////////////////////////////////////////////////////////////////////////////
    if(hold==0){ 
       if(times>0.05){i=0;sinn();while(i<640){data[i]=PINC;delayMicroseconds(sek);i++;};i=0;}
       if(times==0.05){i=0;sinn();while(i<640){data[i]=PINC;i++;}i=0;}
       if(times<=0.02){sinn();  
  data[0]=PINC;data[1]=PINC;data[2]=PINC;data[3]=PINC;data[4]=PINC;
  data[5]=PINC;data[6]=PINC;data[7]=PINC;data[8]=PINC;data[9]=PINC;
  data[10]=PINC;data[11]=PINC;data[12]=PINC;data[13]=PINC;data[14]=PINC;
  data[15]=PINC;data[16]=PINC;data[17]=PINC;data[18]=PINC;data[19]=PINC;
  data[20]=PINC;data[21]=PINC;data[22]=PINC;data[23]=PINC;data[24]=PINC;
  data[25]=PINC;data[26]=PINC;data[27]=PINC;data[28]=PINC;data[29]=PINC;
  data[30]=PINC;data[31]=PINC;data[32]=PINC;data[33]=PINC;data[34]=PINC;
  data[35]=PINC;data[36]=PINC;data[37]=PINC;data[38]=PINC;data[39]=PINC;
  data[40]=PINC;data[41]=PINC;data[42]=PINC;data[43]=PINC;data[44]=PINC;
  data[45]=PINC;data[46]=PINC;data[47]=PINC;data[48]=PINC;data[49]=PINC;
  data[50]=PINC;data[51]=PINC;data[52]=PINC;data[53]=PINC;data[54]=PINC;
  data[55]=PINC;data[56]=PINC;data[57]=PINC;data[58]=PINC;data[59]=PINC;
  data[60]=PINC;data[61]=PINC;data[62]=PINC;data[63]=PINC;data[64]=PINC;
  data[65]=PINC;data[66]=PINC;data[67]=PINC;data[68]=PINC;data[69]=PINC;
  data[70]=PINC;data[71]=PINC;data[72]=PINC;data[73]=PINC;data[74]=PINC;
  data[75]=PINC;data[76]=PINC;data[77]=PINC;data[78]=PINC;data[79]=PINC;
  data[80]=PINC;data[81]=PINC;data[82]=PINC;data[83]=PINC;data[84]=PINC;
  data[85]=PINC;data[86]=PINC;data[87]=PINC;data[88]=PINC;data[89]=PINC;
  data[90]=PINC;data[91]=PINC;data[92]=PINC;data[93]=PINC;data[94]=PINC;
  data[95]=PINC;data[96]=PINC;data[97]=PINC;data[98]=PINC;data[99]=PINC;
  data[100]=PINC;data[101]=PINC;data[102]=PINC;data[103]=PINC;data[104]=PINC;
  data[105]=PINC;data[106]=PINC;data[107]=PINC;data[108]=PINC;data[109]=PINC;
  data[110]=PINC;data[111]=PINC;data[112]=PINC;data[113]=PINC;data[114]=PINC;
  data[115]=PINC;data[116]=PINC;data[117]=PINC;data[118]=PINC;data[119]=PINC;
  data[120]=PINC;data[121]=PINC;data[122]=PINC;data[123]=PINC;data[124]=PINC;
  data[125]=PINC;data[126]=PINC;data[127]=PINC;data[128]=PINC;data[129]=PINC;
  data[130]=PINC;data[131]=PINC;data[132]=PINC;data[133]=PINC;data[134]=PINC;
  data[135]=PINC;data[136]=PINC;data[137]=PINC;data[138]=PINC;data[139]=PINC;
  data[140]=PINC;data[141]=PINC;data[142]=PINC;data[143]=PINC;data[144]=PINC;
  data[145]=PINC;data[146]=PINC;data[147]=PINC;data[148]=PINC;data[149]=PINC;
  data[150]=PINC;data[151]=PINC;data[152]=PINC;data[153]=PINC;data[154]=PINC;
  data[155]=PINC;data[156]=PINC;data[157]=PINC;data[158]=PINC;data[159]=PINC;
  data[160]=PINC;data[161]=PINC;data[162]=PINC;data[163]=PINC;data[164]=PINC;
  data[165]=PINC;data[166]=PINC;data[167]=PINC;data[168]=PINC;data[169]=PINC;
  data[170]=PINC;data[171]=PINC;data[172]=PINC;data[173]=PINC;data[174]=PINC;
  data[175]=PINC;data[176]=PINC;data[177]=PINC;data[178]=PINC;data[179]=PINC;
  data[180]=PINC;data[181]=PINC;data[182]=PINC;data[183]=PINC;data[184]=PINC;
  data[185]=PINC;data[186]=PINC;data[187]=PINC;data[188]=PINC;data[189]=PINC;
  data[190]=PINC;data[191]=PINC;data[192]=PINC;data[193]=PINC;data[194]=PINC;
  data[195]=PINC;data[196]=PINC;data[197]=PINC;data[198]=PINC;data[199]=PINC;
  data[200]=PINC;data[201]=PINC;data[202]=PINC;data[203]=PINC;data[204]=PINC;
  data[205]=PINC;data[206]=PINC;data[207]=PINC;data[208]=PINC;data[209]=PINC;
  data[210]=PINC;data[211]=PINC;data[212]=PINC;data[213]=PINC;data[214]=PINC;
  data[215]=PINC;data[216]=PINC;data[217]=PINC;data[218]=PINC;data[219]=PINC;
  data[220]=PINC;data[221]=PINC;data[222]=PINC;data[223]=PINC;data[224]=PINC;
  data[225]=PINC;data[226]=PINC;data[227]=PINC;data[228]=PINC;data[229]=PINC;
  data[230]=PINC;data[231]=PINC;data[232]=PINC;data[233]=PINC;data[234]=PINC;
  data[235]=PINC;data[236]=PINC;data[237]=PINC;data[238]=PINC;data[239]=PINC;
  data[240]=PINC;data[241]=PINC;data[242]=PINC;data[243]=PINC;data[244]=PINC;
  data[245]=PINC;data[246]=PINC;data[247]=PINC;data[248]=PINC;data[249]=PINC;
  data[250]=PINC;data[251]=PINC;data[252]=PINC;data[253]=PINC;data[254]=PINC;
  data[255]=PINC;data[256]=PINC;data[257]=PINC;data[258]=PINC;data[259]=PINC;
  data[260]=PINC;data[261]=PINC;data[262]=PINC;data[263]=PINC;data[264]=PINC;
  data[265]=PINC;data[266]=PINC;data[267]=PINC;data[268]=PINC;data[269]=PINC;
  data[270]=PINC;data[271]=PINC;data[272]=PINC;data[273]=PINC;data[274]=PINC;
  data[275]=PINC;data[276]=PINC;data[277]=PINC;data[278]=PINC;data[279]=PINC;
  data[280]=PINC;data[281]=PINC;data[282]=PINC;data[283]=PINC;data[284]=PINC;
  data[285]=PINC;data[286]=PINC;data[287]=PINC;data[288]=PINC;data[289]=PINC;
  data[290]=PINC;data[291]=PINC;data[292]=PINC;data[293]=PINC;data[294]=PINC;
  data[295]=PINC;data[296]=PINC;data[297]=PINC;data[298]=PINC;data[299]=PINC;
  data[300]=PINC;data[301]=PINC;data[302]=PINC;data[303]=PINC;data[304]=PINC;
  data[305]=PINC;data[306]=PINC;data[307]=PINC;data[308]=PINC;data[309]=PINC;
  data[310]=PINC;data[311]=PINC;data[312]=PINC;data[313]=PINC;data[314]=PINC;
  data[315]=PINC;data[316]=PINC;data[317]=PINC;data[318]=PINC;data[319]=PINC;
  data[320]=PINC;data[321]=PINC;data[322]=PINC;data[323]=PINC;data[324]=PINC;
  data[325]=PINC;data[326]=PINC;data[327]=PINC;data[328]=PINC;data[329]=PINC;
  data[330]=PINC;data[331]=PINC;data[332]=PINC;data[333]=PINC;data[334]=PINC;
  data[335]=PINC;data[336]=PINC;data[337]=PINC;data[338]=PINC;data[339]=PINC;
  data[340]=PINC;data[341]=PINC;data[342]=PINC;data[343]=PINC;data[344]=PINC;
  data[345]=PINC;data[346]=PINC;data[347]=PINC;data[348]=PINC;data[349]=PINC;
  data[350]=PINC;data[351]=PINC;data[352]=PINC;data[353]=PINC;data[354]=PINC;
  data[355]=PINC;data[356]=PINC;data[357]=PINC;data[358]=PINC;data[359]=PINC;
  data[360]=PINC;data[361]=PINC;data[362]=PINC;data[363]=PINC;data[364]=PINC;
  data[365]=PINC;data[366]=PINC;data[367]=PINC;data[368]=PINC;data[369]=PINC;
  data[370]=PINC;data[371]=PINC;data[372]=PINC;data[373]=PINC;data[374]=PINC;
  data[375]=PINC;data[376]=PINC;data[377]=PINC;data[378]=PINC;data[379]=PINC;
  data[380]=PINC;data[381]=PINC;data[382]=PINC;data[383]=PINC;data[384]=PINC;
  data[385]=PINC;data[386]=PINC;data[387]=PINC;data[388]=PINC;data[389]=PINC;
  data[390]=PINC;data[391]=PINC;data[392]=PINC;data[393]=PINC;data[394]=PINC;
  data[395]=PINC;data[396]=PINC;data[397]=PINC;data[398]=PINC;data[399]=PINC;
  data[400]=PINC;data[401]=PINC;data[402]=PINC;data[403]=PINC;data[404]=PINC;
  data[405]=PINC;data[406]=PINC;data[407]=PINC;data[408]=PINC;data[409]=PINC;
  data[410]=PINC;data[411]=PINC;data[412]=PINC;data[413]=PINC;data[414]=PINC;
  data[415]=PINC;data[416]=PINC;data[417]=PINC;data[418]=PINC;data[419]=PINC;
  data[420]=PINC;data[421]=PINC;data[422]=PINC;data[423]=PINC;data[424]=PINC;
  data[425]=PINC;data[426]=PINC;data[427]=PINC;data[428]=PINC;data[429]=PINC;
  data[430]=PINC;data[431]=PINC;data[432]=PINC;data[433]=PINC;data[434]=PINC;
  data[435]=PINC;data[436]=PINC;data[437]=PINC;data[438]=PINC;data[439]=PINC;
  data[440]=PINC;data[441]=PINC;data[442]=PINC;data[443]=PINC;data[444]=PINC;
  data[445]=PINC;data[446]=PINC;data[447]=PINC;data[448]=PINC;data[449]=PINC;
  data[450]=PINC;data[451]=PINC;data[452]=PINC;data[453]=PINC;data[454]=PINC;
  data[455]=PINC;data[456]=PINC;data[457]=PINC;data[458]=PINC;data[459]=PINC;
  data[460]=PINC;data[461]=PINC;data[462]=PINC;data[463]=PINC;data[464]=PINC;
  data[465]=PINC;data[466]=PINC;data[467]=PINC;data[468]=PINC;data[469]=PINC;
  data[470]=PINC;data[471]=PINC;data[472]=PINC;data[473]=PINC;data[474]=PINC;
  data[475]=PINC;data[476]=PINC;data[477]=PINC;data[478]=PINC;data[479]=PINC;
  data[480]=PINC;data[481]=PINC;data[482]=PINC;data[483]=PINC;data[484]=PINC;
  data[485]=PINC;data[486]=PINC;data[487]=PINC;data[488]=PINC;data[489]=PINC;
  data[490]=PINC;data[491]=PINC;data[492]=PINC;data[493]=PINC;data[494]=PINC;
  data[495]=PINC;data[496]=PINC;data[497]=PINC;data[498]=PINC;data[499]=PINC;
  data[500]=PINC;data[501]=PINC;data[502]=PINC;data[503]=PINC;data[504]=PINC;
  data[505]=PINC;data[506]=PINC;data[507]=PINC;data[508]=PINC;data[509]=PINC;
  data[510]=PINC;data[511]=PINC;data[512]=PINC;data[513]=PINC;data[514]=PINC;
  data[515]=PINC;data[516]=PINC;data[517]=PINC;data[518]=PINC;data[519]=PINC;
  data[520]=PINC;data[521]=PINC;data[522]=PINC;data[523]=PINC;data[524]=PINC;
  data[525]=PINC;data[526]=PINC;data[527]=PINC;data[528]=PINC;data[529]=PINC;
  data[530]=PINC;data[531]=PINC;data[532]=PINC;data[533]=PINC;data[534]=PINC;
  data[535]=PINC;data[536]=PINC;data[537]=PINC;data[538]=PINC;data[539]=PINC;
  data[540]=PINC;data[541]=PINC;data[542]=PINC;data[543]=PINC;data[544]=PINC;
  data[545]=PINC;data[546]=PINC;data[547]=PINC;data[548]=PINC;data[549]=PINC;
  data[550]=PINC;data[551]=PINC;data[552]=PINC;data[553]=PINC;data[554]=PINC;
  data[555]=PINC;data[556]=PINC;data[557]=PINC;data[558]=PINC;data[559]=PINC;
  data[560]=PINC;data[561]=PINC;data[562]=PINC;data[563]=PINC;data[564]=PINC;
  data[565]=PINC;data[566]=PINC;data[567]=PINC;data[568]=PINC;data[569]=PINC;
  data[570]=PINC;data[571]=PINC;data[572]=PINC;data[573]=PINC;data[574]=PINC;
  data[575]=PINC;data[576]=PINC;data[577]=PINC;data[578]=PINC;data[579]=PINC;
  data[580]=PINC;data[581]=PINC;data[582]=PINC;data[583]=PINC;data[584]=PINC;
  data[585]=PINC;data[586]=PINC;data[587]=PINC;data[588]=PINC;data[589]=PINC;
  data[590]=PINC;data[591]=PINC;data[592]=PINC;data[593]=PINC;data[594]=PINC;
  data[595]=PINC;data[596]=PINC;data[597]=PINC;data[598]=PINC;data[599]=PINC;
  data[600]=PINC;data[601]=PINC;data[602]=PINC;data[603]=PINC;data[604]=PINC;
  data[605]=PINC;data[606]=PINC;data[607]=PINC;data[608]=PINC;data[609]=PINC;
  data[610]=PINC;data[611]=PINC;data[612]=PINC;data[613]=PINC;data[614]=PINC;
  data[615]=PINC;data[616]=PINC;data[617]=PINC;data[618]=PINC;data[619]=PINC;
  data[620]=PINC;data[621]=PINC;data[622]=PINC;data[623]=PINC;data[624]=PINC;
  data[625]=PINC;data[626]=PINC;data[627]=PINC;data[628]=PINC;data[629]=PINC;
  data[630]=PINC;data[631]=PINC;data[632]=PINC;data[633]=PINC;data[634]=PINC;
  data[635]=PINC;data[636]=PINC;data[637]=PINC;data[638]=PINC;data[639]=PINC;
  data[640]=PINC;
 
 }}i=0;
 
 //////////////////////// РАЗВЕРТКА //////////////////////////////////////////  
   switch(raz){
   case 0: times=50;sek=1050;fff=0;break;
   case 1: times=20;sek=420;fff=0;break;
   case 2: times=10;sek=200;fff=0;break;
   case 3: times=5;sek=100;fff=0;break;
   case 4: times=2;sek=40;fff=0;break;
   case 5: times=1;sek=19;fff=0;break;
   case 6: times=0.5;sek=7;fff=-9;break;
   case 7: times=0.2;sek=3;fff=4;break;
   case 8: times=0.1;sek=1;fff=12;break;
   case 9: times=0.05;fff=12;break;
   case 10: times=0.02;fff=-57;break;  
   case 11: times=0.010;fff=-57;break;
   case 12: times=0.005;fff=-5;break;
   case 13: times=0.002;fff=5;break;
   }
 
   myGLCD.setColor(0xffff); setka();
 
  if(raz<9){
  i=0;while(i<319){i++; 
 myGLCD.setColor(0,0,0); myGLCD.drawLine(i, 230-data_old[i]*3,i, 230-data_old[i+1]*3);
 myGLCD.setColor(0xF800); myGLCD.drawLine(i, 230-data[i+hh]*3,i, 230-data[i+hh+1]*3);}i=0;}
 
   if(raz==9||raz==10){
  i=0;while(i<319){i++; 
 myGLCD.setColor(0,0,0); myGLCD.drawLine(i, 230-data_old[i]*3,i, 230-data_old[i+1]*3);
 myGLCD.setColor(0xF800); myGLCD.drawLine(i, 230-data[i+hh]*3,i, 230-data[i+hh+1]*3);}i=0;}
 
    if(raz==11||raz==12){
  i=0;while(i<160){i++; 
 myGLCD.setColor(0,0,0); myGLCD.drawLine(i*2, 230-data_old[i]*3,i*2, 230-data_old[i+1]*3);
 myGLCD.setColor(0xF800); myGLCD.drawLine(i*2, 230-data[i+hh]*3,i*2, 230-data[i+hh+1]*3);}i=0;}
 
    if(raz==13){ myGLCD.setColor(0x7FFFC5); myGLCD.print("LOGIC LEVEL",110,90);
      i=0;while(i<640){i++;if(data[i]>30){data[i]=40;}else{data[i]=20;}}i=0;
  i=0;while(i<80){i++; 
 myGLCD.setColor(0,0,0); myGLCD.drawLine(i*4, 230-data_old[i]*3,i*4, 230-data_old[i+1]*3);
 myGLCD.setColor(0x00137F); myGLCD.drawLine(i*4, 230-data[i+hh]*3,i*4, 230-data[i+hh+1]*3);}i=0;} 
 
   i=0;while(i<640){i++;data_old[i]=data[i+hh];}i=0;
  arr_m();
  if(w==1){EEPROM.update(0,raz);
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(0,0,60,12);
  myGLCD.setColor(0xffff);
  // печатаем строку в указанной строке позиции
myGLCD.printNumF(times,3, 10, 0); 
myGLCD.print("mS/DIV ",60,0);  if(raz!=13){myGLCD.print("1 V/DIV ",10,24);}else{myGLCD.print("LOGIC   ",10,24);}
myGLCD.print("OSCILLOSCOPE",200,0);
myGLCD.print("RCL-RADIO.RU ",200,12);
myGLCD.print("Version 0.1 ",200,24);
w=0;}
 myGLCD.setColor(0xffff);if(raz==13){arr_max=63;arr_min=0;}
                         myGLCD.print("Umax ",120,0); myGLCD.printNumF((float)arr_max*5/63,1, 160, 0); 
                         myGLCD.print("Umin ",120,12); myGLCD.printNumF((float)arr_min*5/63,1, 160, 12); 
                         myGLCD.print("Usig ",120,24); myGLCD.printNumF((float)arr_max*5/63-((float)arr_min*5/63),1, 160, 24);
                         if(hold==1){myGLCD.print("HOLD",10,12);if(w2==0){delay(1000);w2=1;}}else{myGLCD.print("AUTO",10,12);}
arr_min=255;arr_max=0;
}
 
void sinn(){
            while(PINC>arr){h0++;if(h0>10000){break;}}h0=0;
            while(PINC>arr-10){h0++;if(h0>10000){break;}}h0=0;
            while(PINC<arr){h1++;if(h1>10000){break;}}h1=0;
          }
 
void arr_m(){
 
  for(i=10;i<255;i++){arr_min = min(arr_min, data[i]);}
  for(i=10;i<255;i++){arr_max = max(arr_max, data[i]);}
  arr=arr_max+arr_min;
  if(arr>30){arr=20;}
  if(arr<20){arr=10;}
  }    
 
  void setka(){ ///// сетка 
if(raz<13){   
  for(y=40;y<240;y=y+40){
  for(x=10;x<320;x=x+10){
myGLCD.drawPixel(x, y);}}}
 
 for(x=48;x<320;x=x+48-fff){
  for(y=40;y<240;y=y+10){
myGLCD.drawPixel(x, y);}}}

Comments

  1. Здравствуйте, уважаемый автор данного осциллографа. Я попытался его воспроизвести, но столкнулся с некоторыми трудностями. Прошу пояснить кое-какие детали.
    1. Насколько я понял, на схеме в пунктирной рамочке находится делитель напряжения? Если это так, то ко входу IN припаевается BNC-разъем для подключения осциллографа, а OUT соединяется с IN TTL. Если я не прав, то поправьте меня пожалуйста.
    2. У меня на ноге 19 (ANALOG_IN) TLC5540 сейчас от 43 до 150 мВ. Правильно ли это, или должно быть больше?
    3. На D3-D8 сейчас нули, чего быть, по идее, не должно.

    Есть ощущение, что китаец продал мне дохлую микросхему, но все-таки помогите мне в этом убедиться.

  2. 1. В пунктирной рамке показан альтернативный делитель напряжения,в основной схеме делитель напряжения уже есть. Подайте на вход импульсное напряжение и резистом в делителе отрегулируйте чувствительность. На экране должна быть осциллограмма импульсов.
    2. На входе IN должно быть напряжение в пределах 2,5 В (макс), если его нет, то подайте напрямую импульсное напряжение которое по амплитуде не должно превышать напряжение питания АЦП. Если импульсы появятся, значить что-то с делителем.
    3. На D3-D8 должно быть импульсное напряжение с частотой 8 МГц, но оно может отсутствовать если на АЦП подано 0В.

    1. Спасибо за оперативный ответ. Теперь все понятно — у меня в схеме сразу два делителя (лучше было бы подписать этот момент на схеме для таких как я). Переделаю схему.

  3. Выкладываю свою реализацию в kicad
    https://disk.yandex.ru/d/Y5-pCqlBfuo4kA

    Проблемы были из-за двух делителей и забытой дорожки 12 — D9 (CLK). На IN у меня сейчас 0.8 — 1.4 В где-то. Регулировка подстроечником почти ни на что не влияет. Видимо, нужно было оставлять «альтернативный» делитель.
    Что интересно, работоспособна оказалась только библиотека UTFT, предложенная автором. Моя библиотека с бОльшим количеством драйверов не заработала (белый экран). Если кто будет добавлять управление тачскрином, то учтите, что придется переопределять выходы CS и IRQ с помощью этой библиотеки:
    https://github.com/spapadim/XPT2046
    Или вообще использовать эту пару библиотек вместо UTFT:
    https://github.com/PaulStoffregen/ILI9341_t3
    https://github.com/PaulStoffregen/XPT2046_Touchscreen
    По-моему немного нелогично не использовать функцию тачскрина на дисплее с тачскрином. Поэтому я этим когда-нибудь займусь.
    TLC5540I стоил на али около 500 рублей вместе с доставкой, но это не оригинал Texas Instruments, которые давно уже ее не производят. Вроде бы то, что я купил, делают корейцы из Hynix, но у этого клона более узкий корпус (5.5мм шириной) SOP24. В kicad он почему-то называется SO-24.
    Хотелось бы еще на AD9280 нечто подобное сделать. Микросхема стоит копейки, а возможности значительно шире.

Добавить комментарий

Войти с помощью: