мне просто интересно. даже если ты купишь микруху как ты перепишешь программу для использования внешней памяти если не умеешь даже портами напрямую управлять?
Внешнее ОЗУ - плохо для осцилографа. Оно медленей в десятки раз. Вам нужен осцилограф для очччень медленнных процессов?! Забавно что ответ на вопрос, как освободить 86 байт содержится в стартовом сообщении. В первом скетче, строка 23. Найдите в ней неизвестное Вам, примените его к Вашему скетчу и память освободится ;)
Еще можно избавиться от загрузчика arduino, воспользоваться AVRStudio и залить прошивку как на чистый МК - еще и место останется. Правда придется переписать чуток саму прошивку - избавиться от функций библиотек arduino.
Разве загрузчик работает с библиотеками ардуино? Помоему у него одна функция - принять прошивку (скетч) по serial и разместить её в памяти, после чего передать ей управление. С библиотеками ардуино работает только компилятор. После того как код скомпилирован в двоичный - он должен работать в МК Atmega независимо от наличия в нём загрузчика.
P.S. Залить скетч без загрузчика через программатор можно также из родной Arduino IDE. Необязательно ставить ради этого AVRStudio.
Внешнее ОЗУ - плохо для осцилографа. Оно медленей в десятки раз. Вам нужен осцилограф для очччень медленнных процессов?!
внимательнее посмотрите код. там куча переменных нужны только для того, чтобы настройки выставить для дальнейшей работы программы. в этом месте спешить некуда, можно такие переменные в расширенную память кидать, а переменные для основной работы- в обычную. а откуда дровишки, что эта микросхема такая уж медленная ? она вроде на 20 кГц расчитана, мини про столько не может.
Цитата:
В первом скетче, строка 23. Найдите в ней неизвестное Вам, примените его к Вашему скетчу и память освободится ;)
первый скетч меня не интересует, он под совершенно другой, маленький экран, поэтому там всё получается. а в 23й строке там по всей видимости логотип Adafruit, которого в нормальном коде (из сообщения номер 50, стр.2) уже нет.
Цитата:
Разве загрузчик работает с библиотеками ардуино?
естественно нет. optiboot например занимает 512 байт. куда ему еще с какими-то библиотеками работать при таком размере ????
Цитата:
P.S. Залить скетч без загрузчика через программатор можно также из родной Arduino IDE.
спасибо за совет, так и сделал, скетч загрузился но только в белый экран, видимо чего-то я лишнего стёр ))
ладно, на выходных поищу.
Загрузчик сам по себе, библиотеки Arduino сами по себе. AVRStudio или другая среда соответствующего уровня необходима, прежде всего для удобства программирования и настройки компилятора. AVRStudio хороша именно, что сделана специально для AVR. Arduino среда по любому потащит за собой все библиотеки, что негативно скажется на размере прошивки. А если такая жесткая нелюбовь к студии, то можно обойтись notepad++ и ручным компилированием gcc.
а откуда дровишки, что эта микросхема такая уж медленная ? она вроде на 20 кГц расчитана, мини про столько не может.
Все познается в сравнении. Основное ОЗУ в МГц меряем.
Цитата:
Цитата:
В первом скетче, строка 23. Найдите в ней неизвестное Вам, примените его к Вашему скетчу и память освободится ;)
первый скетч меня не интересует, он под совершенно другой, маленький экран, поэтому там всё получается. а в 23й строке там по всей видимости логотип Adafruit, которого в нормальном коде (из сообщения номер 50, стр.2) уже нет.
оно конечно, убрать логотип - дело не хитрое. Как бы намекну ещё раз;) Слово progmem не вызвало вопросов?
спасибо за совет, так и сделал, скетч загрузился но только в белый экран, видимо чего-то я лишнего стёр )) ладно, на выходных поищу.
Есть предположение, что вы прошивкой большего размера могли убить часть загрузчика, а именно с него пытается загрузиться дуинка, если не поменять соответствующие фьюзы и получаем...
Есть предположение, что вы прошивкой большего размера могли убить часть загрузчика, а именно с него пытается загрузиться дуинка, если не поменять соответствующие фьюзы и получаем...
ааа, вон оно чо... фьюзы то я и не заметил...
я вообще вгружал прошивку программатором без загрузчика, не знал что там нужно еще фьюзы настраивать. ну ,по аналогии с прошивкой оптибута.
хм, с ILI9340 всё оказалось еще проще - не заработали даже стандартные примеры из библиотек TFTLCD, Adafruit_TFTLCD.
разбираться было влом, т.к. стандартные примеры работали из библиотеки Adafruit_ILI9340, ее и взял за основу, заточил скетч под нее, всё заработало с полпинка, программа использует 1 кб озу, отлично!
а микросхемы памяти где-то всё еще едут... ну, пригодятся для чего-нибудь ))
хм, с ILI9340 всё оказалось еще проще - не заработали даже стандартные примеры из библиотек TFTLCD, Adafruit_TFTLCD.
разбираться было влом, т.к. стандартные примеры работали из библиотеки Adafruit_ILI9340, ее и взял за основу, заточил скетч под нее, всё заработало с полпинка, программа использует 1 кб озу, отлично!
а микросхемы памяти где-то всё еще едут... ну, пригодятся для чего-нибудь ))
Вот здесь , то-ли итальянец то-ли француз, забульбенил замечательную штуку на друине и LCD Nokia 5110. Скачал, залил в Mega mini pro - всё работает. Только у меня джойстика для управления нет, и не разобрался пока куда что цеплять.
Доброго времени суток! Можете помочь с распиновкой WD-X0908V. Просьба в Google не отсылайте, пожалуйста, так как там только лишь похожие вопросы на форумах на разных языках, но ответа ни одного не найти. Может оно бы и проще выкинуть этот экран, но во-первых в проекте нужен дисплей "чем меньше - тем лучше", так как это будет носимый на руке гаджет, а покупать другой пока финансы не позволяют, ибо студент...
Вот фото этого малыша:
Как запасной вариант рассматривался дисплей от SonyEricsson J110i, но это тоже "популярный" по запросам и, увы, "безответный" WD-X0906XQ...
Вот на kazus-e написали как раз: "Протокола обмена, ненайдёшь наверное. Вообщем геморой с ним возиться, нет смысла.". Советуют от нокии всё-таки... За подборку огромное СПАСИБО! (И где Вы её только накопали? Не поделитесь источником?:) ) Конечно попробую подключить его, не впервой гемороиться... Но видно, придется-таки заказывать от нокии, ну "про всякий случай" хотя бы, применение всё-равно найдётся, были бы детали.
dtvims пишет:
Только если получится подключить, Вы выложите для потомков :)
Предварительно, нашел совместимость этого монитора по моделям телефонов.
Тупо было интересно смогу ли что найти... Понял только то, что можно попытаться поискать что-то аналогичное (другие дисплеи от моторолы похожего типа) и попытаться по аналогии подключиться к Вашему дисплею. Скорее всего там одинаковые контроллеры дисплея или их все-равно немного. Схема подключения вроде есть, значит осталось угадать протокол, а он от контроллера зависит. Как-то так, наверное...
А можно, коль скоро для истории, весь проект выложить? На каком все-таки экране запустили, 5110? Сама схема отсутствует, тем более 2-канальная. Ну чтобы повторить можно было.
А можно, коль скоро для истории, весь проект выложить? На каком все-таки экране запустили, 5110? Сама схема отсутствует, тем более 2-канальная. Ну чтобы повторить можно было.
Присоединяюсь.!!!
Удалось запустить на дисплее 5110 только вариант без шкалы и значений.
Перечитал всю тему и целого решения как на 5110 уместить вариант с шкалой не нашел!(
Вы же сами пишите что он не сохранился так как не заслуживает внимания, но у нас в продаже 5110 полно и у меня на руках сейсас есть.
Удалось собрать только простой без шкали.
Пожалуйста подправьте пример со шкалой под 5110!!!
dtvims пишет:
Для последнего код выложен выше. Для 5110 код не сохранился как не заслуживающий внимания ибо отличался от исходного проекта оставленного автором только названием библиотеки, а впоследствии правкой констант, регулирующих размеры экрана.
Остальное с экраном 5110 не работает и в постах нет рабочего примера, есть только указания что можно подправить авось заработает.
Ни рабочего скетча ни библиотек именно к этому примеру нет!
Я понимаю те кто знает спецы крутые и влом такими пустяками заморачиваться чтоб подправить строки скетча прикрепить библиотеку и выложить, надеюсь и для вас кому-то влом будет что-то делать.
Привет всем. Вопрос к тем, кто собирал этот осциллограф, который под дисплей 128х64. Я собрал, есть несколько проблем:
1) При тесте прибора, графики обрезаются на половину (нижнюю). Это у всех так или только у меня? Пришла мысль, что в схеме не хватает усилителя для смещения напряжения. Кто-то его делал? Можете привести схему?
2) При подведении руки к аналоговому вводу ардуины, отвечающему за прием сигнала, осциллограф бодро показывает синусоиду 50-52Hz (полную, без обрезания). Показания на экране обновляются несколько раз в секунду. Если подаю какую-нибудь форму сигнала, осциллограф начинает сильно тормозить (показания и график может зависать на несколько секунд, вплоть до 7-10 секунд). После меняется картинка, опять висит. Если при этом отключить генератор, и поднести опять руку, то в 50% случаев, скокрость отображения информации возвращаеся. Кто-то сталкивался с такой проблемой? Можете подсказать ее решение?
Буду благодарен как конкретным решениям, так и дельным советам!
Под каждый дисплей надо перенастраивать отрисовку, чтобы не отрезалось или отображалось на весь экран.
По усилителю ничего не скажу. Сам поигрался с данным осциллографом и решил повернуться в сторону китайской копии USBee AX Pro, о чем ничуть не жалею. Уже несколько раз офигенно выручал.
Наводки он ловит прекрасно, а собственно и должен ловить, ведь вход ни к чему не подтянут и представляет собой простую антену, на которую и ловит 50Гц. Сам подключал ему на вход шим, добавлял конденсаторы, ну и так по мелочи, но никаких, описаных Вами подтормаживаний не наблюдал. Разве что При сигнале высокой частоты, дисплей (зависит от скорости общения с ним) очень долго может отрисовывать вертикальные линии. Чем больше линий, тем дольше отрисовывает.
Upd. Из-за долгой отрисовки, я себе переписывал функции отрисовки линий, для увеличения быстродействия на отрисовке вертикальных линий - видимо по этому более тормозов и не наблюдал :)
dtvims, изображение не обрезается, оно четко помещается на экране. Обрезается сам сигнал. Я его отрисовку приподнял, видно, что что-то с сигналом, а не с выводом на экран. Сам гравик (если смотреть без поднятия) прижат к низу экрана, а не по центру.
Также перевел некоторые пункты меню на кнопки, которые подключены через резисторы 10к на землю. Может загвоздка в них?
Из-за долгой отрисовки, я себе переписывал функции отрисовки линий, для увеличения быстродействия на отрисовке вертикальных линий
Можете про переписывание функции рассказать поподробнее? Или привести кусок кода.
Если сдвиг графика, так может так и должно быть: импульс слабый? Там же на вход можно подавать только 0-5В, где 5В - напряжение питания.
Если у Вас в одном случае идет быстро, а вдругом медленно, то опрос кнопок, скорее всего, тут непричем.
Пример кода отрисовки искать надо. Может я уже его где-то тут выкладывал... В общем, я полез в бибилиотеку и там нашел функции отрисовки прямых линий (назывались, что-то вроде "Быстрая линия") только по X или Y сразу блоками (отрисовка прямоугольника по кординатам двух углов - это если дисплей такое поддерживает), по моему это было в adafruit, а может и нет :(. И, основываясь на этих функциях сделал свою функцию отрисовки линий: Расчитывал на какие по длине отрезки можно разбить линию, если отрезки более 3-х пикселей (только в этом случае есть смысл оптимизации), то, с учетом направления отрезка (по Х или Y), выбирал или одну быструю отрисовку или другую. У меня так же было ограничение, что моя функция отрисовывала линии только слева направо - в этом оптимизация по величине кода.
Upd. Вспомнил, что еще менял весь подход отрисовки оригинального кода. Старый график удалял не стиранием всего дисплея, а только стиранием старых линий (отрисовка цветом фона).
Привет всем. Вопрос к тем, кто собирал этот осциллограф, который под дисплей 128х64. Я собрал, есть несколько проблем:
1) При тесте прибора, графики обрезаются на половину (нижнюю). Это у всех так или только у меня? Пришла мысль, что в схеме не хватает усилителя для смещения напряжения. Кто-то его делал? Можете привести схему?
2) При подведении руки к аналоговому вводу ардуины, отвечающему за прием сигнала, осциллограф бодро показывает синусоиду 50-52Hz (полную, без обрезания). Показания на экране обновляются несколько раз в секунду. Если подаю какую-нибудь форму сигнала, осциллограф начинает сильно тормозить (показания и график может зависать на несколько секунд, вплоть до 7-10 секунд). После меняется картинка, опять висит. Если при этом отключить генератор, и поднести опять руку, то в 50% случаев, скокрость отображения информации возвращаеся. Кто-то сталкивался с такой проблемой? Можете подсказать ее решение?
Буду благодарен как конкретным решениям, так и дельным советам!
Вчера перед сном слепил из того что было. Сначала наткнулся в ютубе на ролик с осцилоскопом, потом подумал, что у меня все есть, взял и как смог слепил. Чувак из ролика ни че не объяснил, схемы нет. Видно такой же "спец" как и я.
dtvims, Я с кнопками предполагаю проблему сдвига сигнала и его обрезку, а не быстро/медлено. Хотя завтра отпаяю кнопки, проверю, что-либо изменится или нет.
Joiner, у Вас вообще другой проект, насколько я понимаю. Мы сейчас обсуждаем вот этот проект: http://www.semifluid.com/2013/05/28/arduino-fio-lcd-oscilloscope/ Можете привести ссылку или скеч? Может чего полезного из него извлеку. А какие характеристики этого осциллографа?
/*
This is set up to use a 128x64 I2C screen, as available
here: http://www.banggood.com/buy/0-96-oled.html
For wiring details see http://youtu.be/XHDNXXhg3Hg
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
/********************************************/
#define CHARWIDTH 5
#define CHARHEIGHT 8
#define AXISWIDTH (2 + 1) // axis will show two-pixel wide graph ticks, then an empty column
#define VISIBLEVALUEPIXELS (128 - AXISWIDTH) // the number of samples visible on screen
#define NUMVALUES (2 * VISIBLEVALUEPIXELS) // the total number of samples (take twice as many as visible, to help find trigger point
#define TRIGGER_ENABLE_PIN 2 // set this pin high to enable trigger
#define SCREEN_UPDATE_ENABLE_PIN 3 // set this pin high to freeze screen
byte values[NUMVALUES]; // stores read analog values mapped to 0-63
int pos = 0; // the next position in the value array to read
int count = 0; // the total number of times through the loop
unsigned long readStartTime = 0; // time when the current sampling started
int sampleRate = 1; // A value of 1 will sample every time through the loop, 5 will sample every fifth time etc.
/********************************************/
// Draws a printf style string at the current cursor position
void displayln(const char* format, ...)
{
char buffer[32];
va_list args;
va_start(args, format);
vsprintf(buffer, format, args);
va_end(args);
int len = strlen(buffer);
for (uint8_t i = 0; i < len; i++) {
display.write(buffer[i]);
}
}
// Draws the graph ticks for the vertical axis
void drawAxis()
{
// graph ticks
for (int x = 0; x < 2; x++) {
display.drawPixel(x, 0, WHITE);
display.drawPixel(x, 13, WHITE);
display.drawPixel(x, 26, WHITE);
display.drawPixel(x, 38, WHITE);
display.drawPixel(x, 50, WHITE);
display.drawPixel(x, 63, WHITE);
}
}
// Draws the sampled values
void drawValues()
{
int start = 0;
if ( digitalRead(TRIGGER_ENABLE_PIN) ) {
// Find the first occurence of zero
for (int i = 0; i < NUMVALUES; i++) {
if ( values[i] == 0 ) {
// Now find the next value that is not zero
for (; i < NUMVALUES; i++) {
if ( values[i] != 0 ) {
start = i;
break;
}
}
break;
}
}
// If the trigger point is not within half of our values, we will
// not have enough sample points to show the wave correctly
if ( start >= VISIBLEVALUEPIXELS )
return;
}
for (int i = 0; i < VISIBLEVALUEPIXELS; i++) {
display.drawPixel(i + AXISWIDTH, 63 - (values[i + start]), WHITE);
}
}
// Shows the time taken to sample the values shown on screen
void drawFrameTime(unsigned long us)
{
display.setCursor(9 * CHARWIDTH, 7 * CHARHEIGHT - 2); // almost at bottom, approximately centered
displayln("%ld us", us);
}
/********************************************/
void setup() {
// Set up the display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Initialize with the I2C addr 0x3D (for the 128x64)
display.setTextColor(WHITE);
pinMode(TRIGGER_ENABLE_PIN, INPUT);
pinMode(SCREEN_UPDATE_ENABLE_PIN, INPUT);
}
/********************************************/
void loop() {
// If a sampling run is about to start, record the start time
if ( pos == 0 )
readStartTime = micros();
// If this iteration is one we want a sample for, take the sample
if ( (++count) % sampleRate == 0 )
values[pos++] = analogRead(0) >> 4; // shifting right by 4 efficiently maps 0-1023 range to 0-63
// If we have filled the sample buffer, display the results on screen
if ( pos >= NUMVALUES ) {
// Measure how long the run took
unsigned long totalSampleTime = (micros() - readStartTime) / 2; // Divide by 2 because we are taking twice as many samples as are shown on the screen
if ( !digitalRead(SCREEN_UPDATE_ENABLE_PIN) ) {
// Display the data on screen
display.clearDisplay();
drawAxis();
drawValues();
drawFrameTime(totalSampleTime);
display.display();
}
// Reset values for the next sampling run
pos = 0;
count = 0;
}
}
И еще скетч
#include <SPI.h>
#include <Adafruit_GFX.h>
#include "Adafruit_ILI9340.h"
#define _sclk 13
#define _miso 12
#define _mosi 11
#define _cs 10
#define _dc 9
#define _rst 8
Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);
/********************************************/
#define SCREENWIDTH 320
#define SCREENHEIGHT 240
#define CHARWIDTH 5
#define CHARHEIGHT 7
#define AXISWIDTH (2 + 1) // axis will show two-pixel wide graph ticks, then an empty column
#define VISIBLEVALUEPIXELS (SCREENWIDTH - AXISWIDTH) // the number of samples visible on screen
#define NUMVALUES (2 * VISIBLEVALUEPIXELS) // the total number of samples (take twice as many as visible, to help find trigger point
#define TRIGGER_ENABLE_PIN 2 // set this pin high to enable trigger
#define SCREEN_UPDATE_ENABLE_PIN 3 // set this pin high to freeze screen
byte values[NUMVALUES]; // stores read analog values mapped to 0-127 (can't store 0-1024 in one byte)
byte values2[NUMVALUES]; // stores read analog values mapped to 0-127 (can't store 0-1024 in one byte)
byte* frontBuffer = values;
byte* backBuffer = values2;
int pos = 0; // the next position in the value array to read
int count = 0; // the total number of times through the loop
unsigned long readStartTime = 0; // time when the current sampling started
int lastStart = 0; // the sample at which drawing started last time (need to know this to clear the old line properly)
// Used by vsprintf.
char buffer[32];
/********************************************/
// Draws a printf style string at the current cursor position.
// Note that existing contents of buffer are used to overwrite
// the previous display with black to clear it first - a shameful
// hack indeed
void displayln(int x, int y, const char* format, ...)
{
// Erase previous text
tft.setTextColor(ILI9340_BLACK);
tft.setCursor(x, y);
tft.println(buffer);
va_list args;
va_start(args, format);
vsprintf(buffer, format, args);
va_end(args);
tft.setTextColor(ILI9340_YELLOW);
tft.setCursor(x, y);
tft.println(buffer);
}
// Draws the graph ticks for the vertical axis
void drawAxis()
{
byte div = SCREENHEIGHT / 5;
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 6; y++) {
tft.drawPixel(x, y * div, ILI9340_WHITE);
}
}
}
// Draws the sampled values
void drawValues()
{
int start = 0;
float mag = SCREENHEIGHT / 128.0; // 128 because sample values are 0-127
if ( true || digitalRead(TRIGGER_ENABLE_PIN) ) {
// Find the first occurence of zero
for (int i = 0; i < NUMVALUES; i++) {
if ( backBuffer[i] != 0 ) {
// Now find the next value that is not zero
for (; i < NUMVALUES; i++) {
if ( backBuffer[i] == 0 ) {
start = i;
break;
}
}
break;
}
}
// If the trigger point is not within half of our values, we will
// not have enough sample points to show the wave correctly. In this
// case, just draw the same line in white to let the user know that
// the values are old (also prevents the screen from scrolling sideways,
// and takes less time)
if ( start >= VISIBLEVALUEPIXELS ) {
for (int i = 0; i < VISIBLEVALUEPIXELS; i++) {
tft.drawPixel(i + AXISWIDTH, SCREENHEIGHT - 1 - (frontBuffer[i + lastStart] * mag), ILI9340_WHITE);
}
return;
}
}
// clear the old line and draw the new
for (int i = 0; i < VISIBLEVALUEPIXELS; i++) {
tft.drawPixel(i + AXISWIDTH, SCREENHEIGHT - 1 - (frontBuffer[i + lastStart] * mag), ILI9340_BLACK);
tft.drawPixel(i + AXISWIDTH, SCREENHEIGHT - 1 - (backBuffer[i + start] * mag), ILI9340_GREEN);
}
// swap sample buffers
byte* tmp = backBuffer;
backBuffer = frontBuffer;
frontBuffer = tmp;
lastStart = start;
}
// Shows the time taken to sample the values shown on screen
void drawFrameTime(unsigned long us)
{
displayln(SCREENWIDTH/2 - 4*CHARWIDTH, SCREENHEIGHT - 1.5*CHARHEIGHT, "%ld us", us);
}
/********************************************/
void setup() {
// Set up the display
tft.begin();
tft.setRotation(1);
tft.setTextSize(1);
tft.fillScreen(ILI9340_BLACK);
drawAxis();
buffer[0] = 0;
pinMode(TRIGGER_ENABLE_PIN, INPUT);
pinMode(SCREEN_UPDATE_ENABLE_PIN, INPUT);
}
/********************************************/
// http://extremeelectronics.co.in/avr-tutorials/using-the-analog-to-digita...
void sampleValues() {
// set the analog reference (high two bits of ADMUX) and select the
// channel (low 4 bits). this also sets ADLAR (left-adjust result)
// to 0 (the default).
ADMUX = (DEFAULT << 6) | (0 & 0x07);
ADCSRA &= ~(ADPS0 | ADPS1 | ADPS2);
boolean digi = false; // set this to true if you are only interested in digital signals, to get MUCH more speed
if ( digi ) {
for (int i = 0; i < NUMVALUES; i++) {
backBuffer[i] = PINC;
delayMicroseconds(5); // change this as necessary to alter the duration of the sampling pass
}
for (int i = 0; i < NUMVALUES; i++) {
backBuffer[i] = backBuffer[i] > 0 ? 64 : 0; // a value of 64 is half-way in the 0-127 range we are using
}
}
else {
for (int i = 0; i < NUMVALUES; i++) {
//start conversion
_SFR_BYTE(ADCSRA) |= _BV(ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
// we have to read ADCL first; doing so locks both ADCL
// and ADCH until ADCH is read. reading ADCL second would
// cause the results of each conversion to be discarded,
// as ADCL and ADCH would be locked when it completed.
uint8_t low = ADCL;
uint8_t high = ADCH;
// Combine the two bytes, shifting so that the result is in 0-127 range.
// You could also do 0-255 range - I can't rememember why I didn't do that,
// but I think it had something to do with my screen being only 240 pixels
// high... looking at it now though, I don't see why that would have mattered.
backBuffer[i] = (high << 5) | (low >> 3);
delayMicroseconds(60); // change this as necessary to alter the duration of the sampling pass
}
}
}
/********************************************/
void loop() {
if ( !digitalRead(SCREEN_UPDATE_ENABLE_PIN) ) {
readStartTime = micros();
sampleValues();
unsigned long totalSampleTime = (micros() - readStartTime) / 2; // Divide by 2 because we are taking twice as many samples as are shown on the screen
// Display the data on screen
drawValues();
drawFrameTime(totalSampleTime);
}
}
Оба скетча компилируются. У меня работает первый. Второй скетч для другого экрана, для какого не понял.
мне просто интересно. даже если ты купишь микруху как ты перепишешь программу для использования внешней памяти если не умеешь даже портами напрямую управлять?
под неё есть готовая библиотека и даже не одна.
библиотека это хорошо, но ты сможешь написать код с использованием либы?
А это и есть оптовый отдел, если зайти ножками в магаз, то цена может превысить данную раз в 5.
Согласен с jeka_tm.
кстати, оставь плиз какой-нибудь контакт - аську, скайп чего-нибудь..
Мой скайп точно соответствует нику.
Внешнее ОЗУ - плохо для осцилографа. Оно медленей в десятки раз. Вам нужен осцилограф для очччень медленнных процессов?! Забавно что ответ на вопрос, как освободить 86 байт содержится в стартовом сообщении. В первом скетче, строка 23. Найдите в ней неизвестное Вам, примените его к Вашему скетчу и память освободится ;)
Еще можно избавиться от загрузчика arduino, воспользоваться AVRStudio и залить прошивку как на чистый МК - еще и место останется. Правда придется переписать чуток саму прошивку - избавиться от функций библиотек arduino.
Разве загрузчик работает с библиотеками ардуино? Помоему у него одна функция - принять прошивку (скетч) по serial и разместить её в памяти, после чего передать ей управление. С библиотеками ардуино работает только компилятор. После того как код скомпилирован в двоичный - он должен работать в МК Atmega независимо от наличия в нём загрузчика.
P.S. Залить скетч без загрузчика через программатор можно также из родной Arduino IDE. Необязательно ставить ради этого AVRStudio.
внимательнее посмотрите код. там куча переменных нужны только для того, чтобы настройки выставить для дальнейшей работы программы. в этом месте спешить некуда, можно такие переменные в расширенную память кидать, а переменные для основной работы- в обычную. а откуда дровишки, что эта микросхема такая уж медленная ? она вроде на 20 кГц расчитана, мини про столько не может.
естественно нет. optiboot например занимает 512 байт. куда ему еще с какими-то библиотеками работать при таком размере ????
спасибо за совет, так и сделал, скетч загрузился но только в белый экран, видимо чего-то я лишнего стёр ))
ладно, на выходных поищу.
Разве загрузчик работает с библиотеками ардуино?
Загрузчик сам по себе, библиотеки Arduino сами по себе. AVRStudio или другая среда соответствующего уровня необходима, прежде всего для удобства программирования и настройки компилятора. AVRStudio хороша именно, что сделана специально для AVR. Arduino среда по любому потащит за собой все библиотеки, что негативно скажется на размере прошивки. А если такая жесткая нелюбовь к студии, то можно обойтись notepad++ и ручным компилированием gcc.
В первом скетче, строка 23. Найдите в ней неизвестное Вам, примените его к Вашему скетчу и память освободится ;)
Есть предположение, что вы прошивкой большего размера могли убить часть загрузчика, а именно с него пытается загрузиться дуинка, если не поменять соответствующие фьюзы и получаем...
Есть предположение, что вы прошивкой большего размера могли убить часть загрузчика, а именно с него пытается загрузиться дуинка, если не поменять соответствующие фьюзы и получаем...
ааа, вон оно чо... фьюзы то я и не заметил...
я вообще вгружал прошивку программатором без загрузчика, не знал что там нужно еще фьюзы настраивать. ну ,по аналогии с прошивкой оптибута.
придется ставить авр студио, разбираться.
Я пользую для записи на чип прогу SinaProg, там есть удобный редактор фьюзов. Должна быть опция вроде BOOTSZ0
Слово progmem не вызвало вопросов?
я так понимаю, что в флеш имеет смысл сбрасывать только то, что, не будет особо крутиться в RAM.
иначе смысл просто пропадает. а там такого особо и нет, всё что было строковое для общения через уарт я просто стёр.
Всем спасибо за эту полезную тему.
Срочно понадобился осциллограф. Под рукой оказались: arduino nano и дисплей 12864.
Пришлось доработать код в двух местах:
1) доработка раз:
2) доработка два:
И вот что получилось:
Ну и задняя часть дисплея, с описанием выводов:
хм, с ILI9340 всё оказалось еще проще - не заработали даже стандартные примеры из библиотек TFTLCD, Adafruit_TFTLCD.
разбираться было влом, т.к. стандартные примеры работали из библиотеки Adafruit_ILI9340, ее и взял за основу, заточил скетч под нее, всё заработало с полпинка, программа использует 1 кб озу, отлично!
а микросхемы памяти где-то всё еще едут... ну, пригодятся для чего-нибудь ))
хм, с ILI9340 всё оказалось еще проще - не заработали даже стандартные примеры из библиотек TFTLCD, Adafruit_TFTLCD.
разбираться было влом, т.к. стандартные примеры работали из библиотеки Adafruit_ILI9340, ее и взял за основу, заточил скетч под нее, всё заработало с полпинка, программа использует 1 кб озу, отлично!
а микросхемы памяти где-то всё еще едут... ну, пригодятся для чего-нибудь ))
Исходник будете публиковать?
Можете выложить схему подключения этого дисплея? Уже неделю над ним бьюсь...
Вот здесь , то-ли итальянец то-ли француз, забульбенил замечательную штуку на друине и LCD Nokia 5110. Скачал, залил в Mega mini pro - всё работает. Только у меня джойстика для управления нет, и не разобрался пока куда что цеплять.
Доброго времени суток! Можете помочь с распиновкой WD-X0908V. Просьба в Google не отсылайте, пожалуйста, так как там только лишь похожие вопросы на форумах на разных языках, но ответа ни одного не найти. Может оно бы и проще выкинуть этот экран, но во-первых в проекте нужен дисплей "чем меньше - тем лучше", так как это будет носимый на руке гаджет, а покупать другой пока финансы не позволяют, ибо студент...
Вот фото этого малыша:
Как запасной вариант рассматривался дисплей от SonyEricsson J110i, но это тоже "популярный" по запросам и, увы, "безответный" WD-X0906XQ...
http://vrtp.ru/index.php?s=337472604dab8bb72ee7489b90a4d5b8&showtopic=11...
тут подскажут.хз откуда они все это берут по дисплеям
Надо искать отталкиваясь от модели мобильного телефона.
Вот что удалось найти: http://kazus.ru/forums/showthread.php?p=146144
Вот тут собрал небольшую подборку схем: http://www.rukodelie-ds.ru/platy/motorola_v3.zip - там везде используется вторым данный дисплей, но на схемах найти его как-то тяжко, но думаю можно.
Удачи! Только если получится подключить, Вы выложите для потомков :)
jeka_tm, dtvims Спасибо!
Вот что удалось найти: http://kazus.ru/forums/showthread.php?p=146144
Вот тут собрал небольшую подборку схем: http://www.rukodelie-ds.ru/platy/motorola_v3.zip - там везде используется вторым данный дисплей, но на схемах найти его как-то тяжко, но думаю можно.
Вот на kazus-e написали как раз: "Протокола обмена, ненайдёшь наверное. Вообщем геморой с ним возиться, нет смысла.". Советуют от нокии всё-таки... За подборку огромное СПАСИБО! (И где Вы её только накопали? Не поделитесь источником?:) ) Конечно попробую подключить его, не впервой гемороиться... Но видно, придется-таки заказывать от нокии, ну "про всякий случай" хотя бы, применение всё-равно найдётся, были бы детали.
Только если получится подключить, Вы выложите для потомков :)
dtvims, Обязательно! )
Удачи!
Ещё раз спасибо!
Брал схемы тут: http://monitor.net.ru/forum/
Предварительно, нашел совместимость этого монитора по моделям телефонов.
Тупо было интересно смогу ли что найти... Понял только то, что можно попытаться поискать что-то аналогичное (другие дисплеи от моторолы похожего типа) и попытаться по аналогии подключиться к Вашему дисплею. Скорее всего там одинаковые контроллеры дисплея или их все-равно немного. Схема подключения вроде есть, значит осталось угадать протокол, а он от контроллера зависит. Как-то так, наверное...
Валяется дисплей от Nokia 5800. Может кто подключал такой?
Я тут осцилограф слегка допилил до 2-х канального. И пересадил на Adafruit_ST7735. Оставлю тут для истории.
Без общения с Serial получается
Sketch uses 14,466 bytes (47%) of program storage space. Maximum is 30,720 bytes.
А можно, коль скоро для истории, весь проект выложить? На каком все-таки экране запустили, 5110? Сама схема отсутствует, тем более 2-канальная. Ну чтобы повторить можно было.
Присоединяюсь.!!!
Удалось запустить на дисплее 5110 только вариант без шкалы и значений.
Как допилить, чтоб шкала и значения были?
Почитайте внимательно тему. Исходники выложены для всех получившихся вариантов.
Я вроде написал, что пересадил на Adafruit_ST7735. Экранчик, соответственно, ST7735.
Пины в исходниках подписаны.
Перечитал всю тему и целого решения как на 5110 уместить вариант с шкалой не нашел!(
Вы же сами пишите что он не сохранился так как не заслуживает внимания, но у нас в продаже 5110 полно и у меня на руках сейсас есть.
Удалось собрать только простой без шкали.
Пожалуйста подправьте пример со шкалой под 5110!!!
Для последнего код выложен выше. Для 5110 код не сохранился как не заслуживающий внимания ибо отличался от исходного проекта оставленного автором только названием библиотеки, а впоследствии правкой констант, регулирующих размеры экрана.
Самый первый пост имеет ссылку на оригинальную программу, где используется 5110. Да и в цитате ответ, что надо изменить...
Что каксается первого поста.
Выкладываю архив в котором скеч+библиотека+схема и инструкция чтоб не забыть может кому-то пригодится.(вариант без шкалы!!)
Все собранно мной вчера и работает. http://my-files.ru/e7szc0
Остальное с экраном 5110 не работает и в постах нет рабочего примера, есть только указания что можно подправить авось заработает.
Ни рабочего скетча ни библиотек именно к этому примеру нет!
Я понимаю те кто знает спецы крутые и влом такими пустяками заморачиваться чтоб подправить строки скетча прикрепить библиотеку и выложить, надеюсь и для вас кому-то влом будет что-то делать.
Очень дружественный форум к новичкам.
ну да. все тебе должны через 5 секунд как только ты захотел. или еще до того как захотел
если ты новичек тебе какие то привилегии должны быть? даже интересно
ну да. все тебе должны через 5 секунд как только ты захотел. или еще до того как захотел
если ты новичек тебе какие то привилегии должны быть? даже интересно
Я не писал что кто-то мне должен, и о пяти секундах вы это тоже зря, потратил на изыскания и освоение пол суток.
А то что никто не подправил скетч это факт.
Разберусь в теме, точно буду подправлять и выкладывать результат вместо того чтоб писать как это просто.
если не подправил значит была причина. забыл или не стал потому что меньше обновлять придется на экране, влияет на быстродействие
писать или не писать, выкладывать или нет личное дело каждого
jeka_tm я с уважением отношусь к вашему труду, и к тому что это все делается бесплатно и спасибо могут никогда не сказать.!
Возможно у вас будет минутка, допилить скетч с шкалой по экран 51110, я могу сразу опробовать в железе и выложить результат?
С уважением Игорь.
извини помочь не смогу. мне дольше придется разбираться в коде, чем тому кто его писал или правил. жди может помогут или сам разбирайся
а какой мой труд? я в основном игрушки радиоуправляемые делаю)))
хотя посмотрел код. вроде все просто. поправочка. относительно. просто нужно время потратить немного
ты сам то знаешь что хочешь увидеть на дисплее?
Сегодня получил бредборд и соединители такая, удобная вещь!
Толи я все залуживал спаивал, потом распаивал, теперь освоение пойдет быстрей!
Раньше на пример простой уходило часа два с пайкой.)
Разберусь с дисплеями сам, и еще 3310 заказал в нем символов больше больше влезет.
Всем спасибо.!
Чтобы допилить под конкретный дисплей, нужно иметь этот дисплей. Вся тема переполнена попытками перейти на тот дисплей, что есть в наличии.
P.s. все скетчи вполне рабочие и заточены под то что есть у авторов.
Привет всем. Вопрос к тем, кто собирал этот осциллограф, который под дисплей 128х64. Я собрал, есть несколько проблем:
1) При тесте прибора, графики обрезаются на половину (нижнюю). Это у всех так или только у меня? Пришла мысль, что в схеме не хватает усилителя для смещения напряжения. Кто-то его делал? Можете привести схему?
2) При подведении руки к аналоговому вводу ардуины, отвечающему за прием сигнала, осциллограф бодро показывает синусоиду 50-52Hz (полную, без обрезания). Показания на экране обновляются несколько раз в секунду. Если подаю какую-нибудь форму сигнала, осциллограф начинает сильно тормозить (показания и график может зависать на несколько секунд, вплоть до 7-10 секунд). После меняется картинка, опять висит. Если при этом отключить генератор, и поднести опять руку, то в 50% случаев, скокрость отображения информации возвращаеся. Кто-то сталкивался с такой проблемой? Можете подсказать ее решение?
Буду благодарен как конкретным решениям, так и дельным советам!
Под каждый дисплей надо перенастраивать отрисовку, чтобы не отрезалось или отображалось на весь экран.
По усилителю ничего не скажу. Сам поигрался с данным осциллографом и решил повернуться в сторону китайской копии USBee AX Pro, о чем ничуть не жалею. Уже несколько раз офигенно выручал.
Наводки он ловит прекрасно, а собственно и должен ловить, ведь вход ни к чему не подтянут и представляет собой простую антену, на которую и ловит 50Гц. Сам подключал ему на вход шим, добавлял конденсаторы, ну и так по мелочи, но никаких, описаных Вами подтормаживаний не наблюдал. Разве что При сигнале высокой частоты, дисплей (зависит от скорости общения с ним) очень долго может отрисовывать вертикальные линии. Чем больше линий, тем дольше отрисовывает.
Upd. Из-за долгой отрисовки, я себе переписывал функции отрисовки линий, для увеличения быстродействия на отрисовке вертикальных линий - видимо по этому более тормозов и не наблюдал :)
dtvims, изображение не обрезается, оно четко помещается на экране. Обрезается сам сигнал. Я его отрисовку приподнял, видно, что что-то с сигналом, а не с выводом на экран. Сам гравик (если смотреть без поднятия) прижат к низу экрана, а не по центру.
Также перевел некоторые пункты меню на кнопки, которые подключены через резисторы 10к на землю. Может загвоздка в них?
Из-за долгой отрисовки, я себе переписывал функции отрисовки линий, для увеличения быстродействия на отрисовке вертикальных линий
Можете про переписывание функции рассказать поподробнее? Или привести кусок кода.
Если сдвиг графика, так может так и должно быть: импульс слабый? Там же на вход можно подавать только 0-5В, где 5В - напряжение питания.
Если у Вас в одном случае идет быстро, а вдругом медленно, то опрос кнопок, скорее всего, тут непричем.
Пример кода отрисовки искать надо. Может я уже его где-то тут выкладывал... В общем, я полез в бибилиотеку и там нашел функции отрисовки прямых линий (назывались, что-то вроде "Быстрая линия") только по X или Y сразу блоками (отрисовка прямоугольника по кординатам двух углов - это если дисплей такое поддерживает), по моему это было в adafruit, а может и нет :(. И, основываясь на этих функциях сделал свою функцию отрисовки линий: Расчитывал на какие по длине отрезки можно разбить линию, если отрезки более 3-х пикселей (только в этом случае есть смысл оптимизации), то, с учетом направления отрезка (по Х или Y), выбирал или одну быструю отрисовку или другую. У меня так же было ограничение, что моя функция отрисовывала линии только слева направо - в этом оптимизация по величине кода.
Upd. Вспомнил, что еще менял весь подход отрисовки оригинального кода. Старый график удалял не стиранием всего дисплея, а только стиранием старых линий (отрисовка цветом фона).
Оригинальный код нашел, а свою переделку нет :(
Очевидно, что это работает только для дисплея ST7735
Upd. Еще можн увеличить скорость SPI, если есть куда...
Привет всем. Вопрос к тем, кто собирал этот осциллограф, который под дисплей 128х64. Я собрал, есть несколько проблем:
1) При тесте прибора, графики обрезаются на половину (нижнюю). Это у всех так или только у меня? Пришла мысль, что в схеме не хватает усилителя для смещения напряжения. Кто-то его делал? Можете привести схему?
2) При подведении руки к аналоговому вводу ардуины, отвечающему за прием сигнала, осциллограф бодро показывает синусоиду 50-52Hz (полную, без обрезания). Показания на экране обновляются несколько раз в секунду. Если подаю какую-нибудь форму сигнала, осциллограф начинает сильно тормозить (показания и график может зависать на несколько секунд, вплоть до 7-10 секунд). После меняется картинка, опять висит. Если при этом отключить генератор, и поднести опять руку, то в 50% случаев, скокрость отображения информации возвращаеся. Кто-то сталкивался с такой проблемой? Можете подсказать ее решение?
Буду благодарен как конкретным решениям, так и дельным советам!
Вчера перед сном слепил из того что было. Сначала наткнулся в ютубе на ролик с осцилоскопом, потом подумал, что у меня все есть, взял и как смог слепил. Чувак из ролика ни че не объяснил, схемы нет. Видно такой же "спец" как и я.
По скетчу понял, что вроде кнопки должны быть.
Вот чего получилось
Кто-нибудь делал такое, кто-то может подсказать?
А оригинальный ролик и скетч можно?
dtvims, Я с кнопками предполагаю проблему сдвига сигнала и его обрезку, а не быстро/медлено. Хотя завтра отпаяю кнопки, проверю, что-либо изменится или нет.
Joiner, у Вас вообще другой проект, насколько я понимаю. Мы сейчас обсуждаем вот этот проект: http://www.semifluid.com/2013/05/28/arduino-fio-lcd-oscilloscope/ Можете привести ссылку или скеч? Может чего полезного из него извлеку. А какие характеристики этого осциллографа?
Даю ссылку на ролик. По ссылкам автора ролика нашел 2 скетча для разных мониторов. Больше ни чего не понял
http://www.youtube.com/watch?v=XHDNXXhg3Hg
Скетч
И еще скетч
Оба скетча компилируются. У меня работает первый. Второй скетч для другого экрана, для какого не понял.