LCD 128x64 и MEGA2560. Зажгём?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Здравия желаю. Есть приблуда ЖКИ графический 128х64. Есть Arduina MEGA 2560. Пытаюсь вдохнуть жизнь в сее нано чудо (я про жки). Банальное "привеД мир" не могу зажечь. То библиотеку не читает, то с подключением не всё понятно. Вот по нижеприведённому скетчу куда подключать? Как я понял надо самому прописать в коде подключение?



/*

  HelloWorld.pde
  
  GLCD Example

  m2tklib = Mini Interative Interface Toolkit Library
  
  Copyright (C) 2011  olikraus@gmail.com

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#include <glcd.h>		// inform Arduino IDE that we will use GLCD library
#include "M2tk.h"
#include "utility/m2ghglcd.h"


M2_LABEL(hello_world_label, "f1", "Hello World");
M2tk m2(&hello_world_label, NULL, NULL, m2_gh_glcd_bf);

void setup() {
}

void loop() {
  m2.draw();
  delay(500);
}

В будущем это должен получится термометр с цифрами на весь экран. Будет не лишним если кто то забежит вперёд и даст ссылку как это воплотить.

step962
Offline
Зарегистрирован: 23.05.2011

hugoboss317 пишет:

Есть приблуда ЖКИ графический 128х64. Есть Arduina MEGA 2560. Пытаюсь вдохнуть жизнь в сее нано чудо (я про жки). Банальное "привеД мир" не могу зажечь. То библиотеку не читает, то с подключением не всё понятно. 

Прежде, чем пытаться подключать обсуждаемую приблуду, необходимо выяснить, на базе какого драйвера она построена. То ли это KS0108, то ли ST7920, то ли совсем третий камень.

А вот выяснив этот вопрос, можно заняться поиском нужной библиотеки. И никак не раньше. Ибо эти дисплейчики очень различаются и по систтеме команд, и по организации графической памяти, и по инициализационным последовательностям...

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Это всё-таки KS0108. Об этом я узнал вот отсюда http://www.kosmodrom.com.ua/pdf/WG12864A.pdf. Посоветуйте тогда библиотеку.

Клапауций
Offline
Зарегистрирован: 10.02.2013

http://playground.arduino.cc/Code/GLCDks0108

Ну, и просто в инете полно инфы об этом экране - вроде, как не проблема.

https://www.google.com/search?hl=ru&q=arduino+KS0108

Sky
Offline
Зарегистрирован: 04.04.2012

Хмм.... пройденый этап..... 

Посмотрите, сюда писал:http://robocraft.ru/blog/892.html

И есть на том же робокрафте обобщающая статья: http://robocraft.ru/blog/arduino/909.html

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Скачал библиотеку glcd поместил куда надо, туда же запхнул русские слова, графику и т.п. 

Подключил ЖКИ так:

ЖКИ - Arduini Mega2560

D/I - A3

R/W - A2

E - A4

DB0 ... DB3 - D8 ... D11 соответственно 

DB4 ... DB7 - D4 ... D7 соответственно 

CS1 - A1

CS2 - A0

RST - RESET

 из сэмплов скетчей в той же лайброритеки загружается, но только балуюсь контрастностью, больше ничего. Несколько раз проверял подключение, подправил конфигурашку в файле ks0108_Arduino (на фото ниже) папки config. А при загрузке скетча WG12864B (на фото) вобще виснет. Что не так делаю?

Клапауций
Offline
Зарегистрирован: 10.02.2013

В конфигурационном файле получается, что ЖКИ подключен к pin 0, 1(USART0_RX, USART0_TX) - так и должно быть?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Нет, должны быть к аналоговым. Разве так?

по свей видимости я в конфигурашке не всё выставил, хотя подключил как в описании по ссылкам.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

Нет, должны быть к аналоговым. Разве так?

по свей видимости я в конфигурашке не всё выставил, хотя подключил как в описании по ссылкам.

Я просто смотрю по файлу конфигурации подключения ЖКИ - некие контакты подключены к pin Ардуино 0, 1, но ведь эти пины(RX, TX) заняты для заливки скетча по ком-порту?

Если втуда ещё и ЖКИ подключить, то скетч не зальётся.

Или библиотека может определять, где у Ардуино цифровые, а где аналоговые ноги и понимает, что pins 0, 1 - это номера аналоговых ног?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Если не трудно, вот по ссылке, посмотрите к каким пинам на дуине подключить ЖКИ. А то руки блин, опускаются: http://robocraft.ru/files/GLCD/glcd-20111205.zip

Клапауций
Offline
Зарегистрирован: 10.02.2013

Смотрите - в файлеге arduino-1.0.4\hardware\arduino\variants\mega\pins_arduino.h есть распиновка вашего камня

	// PORTLIST		
	// -------------------------------------------		
	PE	, // PE 0 ** 0 ** USART0_RX	
	PE	, // PE 1 ** 1 ** USART0_TX	
	PE	, // PE 4 ** 2 ** PWM2	
	PE	, // PE 5 ** 3 ** PWM3	
	PG	, // PG 5 ** 4 ** PWM4	
	PE	, // PE 3 ** 5 ** PWM5	
	PH	, // PH 3 ** 6 ** PWM6	
	PH	, // PH 4 ** 7 ** PWM7	
	PH	, // PH 5 ** 8 ** PWM8	
	PH	, // PH 6 ** 9 ** PWM9	
	PB	, // PB 4 ** 10 ** PWM10	
	PB	, // PB 5 ** 11 ** PWM11	
	PB	, // PB 6 ** 12 ** PWM12	
	PB	, // PB 7 ** 13 ** PWM13	
	PJ	, // PJ 1 ** 14 ** USART3_TX	
	PJ	, // PJ 0 ** 15 ** USART3_RX	
	PH	, // PH 1 ** 16 ** USART2_TX	
	PH	, // PH 0 ** 17 ** USART2_RX	
	PD	, // PD 3 ** 18 ** USART1_TX	
	PD	, // PD 2 ** 19 ** USART1_RX	
	PD	, // PD 1 ** 20 ** I2C_SDA	
	PD	, // PD 0 ** 21 ** I2C_SCL	
	PA	, // PA 0 ** 22 ** D22	
	PA	, // PA 1 ** 23 ** D23	
	PA	, // PA 2 ** 24 ** D24	
	PA	, // PA 3 ** 25 ** D25	
	PA	, // PA 4 ** 26 ** D26	
	PA	, // PA 5 ** 27 ** D27	
	PA	, // PA 6 ** 28 ** D28	
	PA	, // PA 7 ** 29 ** D29	
	PC	, // PC 7 ** 30 ** D30	
	PC	, // PC 6 ** 31 ** D31	
	PC	, // PC 5 ** 32 ** D32	
	PC	, // PC 4 ** 33 ** D33	
	PC	, // PC 3 ** 34 ** D34	
	PC	, // PC 2 ** 35 ** D35	
	PC	, // PC 1 ** 36 ** D36	
	PC	, // PC 0 ** 37 ** D37	
	PD	, // PD 7 ** 38 ** D38	
	PG	, // PG 2 ** 39 ** D39	
	PG	, // PG 1 ** 40 ** D40	
	PG	, // PG 0 ** 41 ** D41	
	PL	, // PL 7 ** 42 ** D42	
	PL	, // PL 6 ** 43 ** D43	
	PL	, // PL 5 ** 44 ** D44	
	PL	, // PL 4 ** 45 ** D45	
	PL	, // PL 3 ** 46 ** D46	
	PL	, // PL 2 ** 47 ** D47	
	PL	, // PL 1 ** 48 ** D48	
	PL	, // PL 0 ** 49 ** D49	
	PB	, // PB 3 ** 50 ** SPI_MISO	
	PB	, // PB 2 ** 51 ** SPI_MOSI	
	PB	, // PB 1 ** 52 ** SPI_SCK	
	PB	, // PB 0 ** 53 ** SPI_SS	
	PF	, // PF 0 ** 54 ** A0	
	PF	, // PF 1 ** 55 ** A1	
	PF	, // PF 2 ** 56 ** A2	
	PF	, // PF 3 ** 57 ** A3	
	PF	, // PF 4 ** 58 ** A4	
	PF	, // PF 5 ** 59 ** A5	
	PF	, // PF 6 ** 60 ** A6	
	PF	, // PF 7 ** 61 ** A7	
	PK	, // PK 0 ** 62 ** A8	
	PK	, // PK 1 ** 63 ** A9	
	PK	, // PK 2 ** 64 ** A10	
	PK	, // PK 3 ** 65 ** A11	
	PK	, // PK 4 ** 66 ** A12	
	PK	, // PK 5 ** 67 ** A13	
	PK	, // PK 6 ** 68 ** A14	
	PK	, // PK 7 ** 69 ** A15	

из которой следует, что аналоговые пины 0, 1, 2, 3, 4 для подключения в соответсвии с картинкой http://robocraft.ru/files/GLCD/2B.jpghttp://robocraft.ru/files/GLCD/2B.jpg - это пины ардуино под номерами 54, 55, 56, 57, 58 соответственно.

т.е. для начала просто заменить 0, 1, 2, 3, 4 на 54, 55, 56, 57, 58 в файле конфигурации, но подключать к аналоговым 0, 1, 2, 3, 4 на плате(не знаю зачем они наплодили сущностей с номерами всега)  и просмотреть остальные на отсутсвие конфликтов... может какие шилды у вас подключены или на самой плате ардуино чего к этим контактам подключено.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не вчитываясь в тему: обычно аналоговые пины обозначаются как A0, A1 и т.п. Это более наглядно, нежели 54, 55 и т.п., хотя в данном случае 54, 55 более корректно, потому что используются они как цифровые пины.

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Поменял конфогурацию пинов в файле ks0108_Arduino, не помогло. Поменял потом в ks0108_Mega и в ks0108_Manual_Config, вот тут всё свершилось. Мир приветствует, демки работают, а тот хитросделанный скетч так и не заливается и виснет, но это уже совсем другая история. Ребята спасибо, узнал много нового. 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Парни, помогите убрать из показаний термометра сотые доли. На символьном печатал туда пустой символ. На графическом не прокатит.



#include <glcd.h>
#include <OneWire.h>
const byte t_gt = 217;
const byte t_lt = 218;
const byte t_eq = 32;
byte degree[8] = 
{
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};
const char celsius[] =
  {39, 'C', };
const int sensorPin = 12;
#include "fixednums15x31.h"
#include "new_Font.h"
OneWire ds(sensorPin);
   float tc_saved, tf_saved;
   boolean f_saved = false;

void setup() { 
  GLCD.Init();
  GLCD.ClearScreen();
GLCD.SelectFont(fixednums15x31);
}
 void loop() {
  byte data[12];
  byte addr[8];
  if(!ds.search(addr)) {
    ds.reset_search();
    delay(500);
    return;
  }
  if(OneWire::crc8(addr, 7) != addr[7]) {
     GLCD.ClearScreen();
     GLCD.CursorToXY(20, 20);
     GLCD.print("CRC is not");
     GLCD.CursorToXY(20, 30);
    GLCD.print("valid!");
    delay(1000);
    return;
  }
  if(addr[0] != 0x28) {
    GLCD.ClearScreen();  
     GLCD.CursorToXY(10, 10);
     GLCD.print("Uncorrect");
     GLCD.CursorToXY(20, 20);
     GLCD.print("sensor type!");
    delay(1000);
    return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
  delay(1000);
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
  for(byte i = 0; i < 9; i++)
    data[i] = ds.read();
    unsigned int raw = 
    (data[1] << 8) | data[0];
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw <<= 3; 
  else if (cfg == 0x20) raw <<= 2; 
  else if (cfg == 0x40) raw <<= 1;
  float tc = (float)raw / 16.0;
  GLCD.ClearScreen();
   GLCD.CursorToXY(5, 18);
  if(tc < 0.0) GLCD.print(tc);
  else {
     GLCD.print('+');
     GLCD.print(tc);
  } 
  GLCD.SelectFont(new_Font);
   GLCD.CursorToXY(108, 7);
   GLCD.print(celsius);
   GLCD.SelectFont(fixednums15x31);
  if(f_saved) {
    byte d;
    if(tc > tc_saved) d = t_gt;
    else if(tc < tc_saved) d = t_lt;
    else d = t_eq;   
    }
  else 
    f_saved = true;
  tc_saved = tc; 
}

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Посмотрите опытным глазом почему выводится графика (фото 1) из строчки кода 090 (без неё воще не выводит графику) если вроде как должно выводить (фото 2) как в строчке 083.







#include <glcd.h>
#include "The16x64_0.h"
#include "The16x64_5.h"
#include "The16x64_10.h"
#include "The16x64_15.h"
#include "The16x64_20.h"
#include "The16x64_25.h"
#include "The16x64_30.h"
#include "The16x64_35.h"
#include "The16x64_38.h"
#include <OneWire.h>
const byte t_gt = 217;
const byte t_lt = 218;
const byte t_eq = 32;
byte degree[8] = 
{
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};
const char celsius[] =
  {39, 'C', };
const int sensorPin = 12;
#include "fixednums15x31.h"
#include "new_Font.h"
OneWire ds(sensorPin);
   float tc_saved, tf_saved;
   boolean f_saved = false;

void setup() { 
  GLCD.Init();
  GLCD.ClearScreen();
GLCD.SelectFont(fixednums15x31);
}
 void loop() {
    

  byte data[12];
  byte addr[8];
  if(!ds.search(addr)) {
    ds.reset_search();
    delay(500);
    return;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
  delay(1000);
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);
  for(byte i = 0; i < 9; i++)
    data[i] = ds.read();
    unsigned int raw = 
    (data[1] << 8) | data[0];
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw <<= 3; 
  else if (cfg == 0x20) raw <<= 2; 
  else if (cfg == 0x40) raw <<= 1;
  float tc = (float)raw / 16.0;
  
   GLCD.CursorToXY(18, 18);
  if(tc < 0.0) GLCD.print(tc);
  else {
     GLCD.print('+');
     GLCD.print(tc);
  } 
  if(tc == 0.0) 
    GLCD.DrawBitmap(The16x64_0, 0,  0); 
    else if(5.0 >= tc > 0.0) 
    GLCD.DrawBitmap(The16x64_5, 0,  0);
    else if(10.0 > tc >= 5.0) 
    GLCD.DrawBitmap(The16x64_10, 0,  0);
    else if (15.0 > tc >= 10.0)
    GLCD.DrawBitmap(The16x64_15, 0,  0);
    else if (20.0 > tc >= 15.0)
    GLCD.DrawBitmap(The16x64_20, 0,  0);
    else if (25.0 > tc >= 20.0)              // не выводит графику
    GLCD.DrawBitmap(The16x64_25, 0,  0);
    else if (30.0 > tc >= 25.0)
    GLCD.DrawBitmap(The16x64_30, 0,  0);
    else if (35.0 > tc >= 30.0)
    GLCD.DrawBitmap(The16x64_35, 0,  0);
    else if (tc > 35)
    GLCD.DrawBitmap(The16x64_38, 0,  0); //перчаиает только это 
    
    else GLCD.DrawBitmap(The16x64_0, 0,  0); 
    
   GLCD.SelectFont(new_Font);
   GLCD.CursorToXY(110, 0);
   GLCD.print(celsius);
   GLCD.SelectFont(fixednums15x31);
  
   
  if(f_saved) {
    byte d;
    if(tc > tc_saved) d = t_gt;
    else if(tc < tc_saved) d = t_lt;
    else d = t_eq;  
    }
  else 
    f_saved = true;
  tc_saved = tc; 
}


 

P.S. Вопрос как убрать сотые доли из показаний ещё актуален

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вернулся я к истокам. Подключил к Atmega16,

Подправил номера пинов в вышеупомянутых файлах (на всякий слусай во всех трёх, ks0108_Arduino, ks0108_Mega, ks0108_Manual_Config)

Следуя инструкциям kisoft - a  (за что огромное спасибо, весь нэт перекопал и нашёл тут) http://arduino.ru/forum/proekty/arduinoide-i-atmega16-korrektiruem-yadro... ,

загрузил скетч в Atmega16. Выдало ошибки: 

\Atmel\arduino-1.0.4\libraries\glcd\/include/glcd_io.h:36,

\Atmel\arduino-1.0.4\libraries\glcd\glcd_Device.cpp:28:

\Atmel\arduino-1.0.4\libraries\glcd/include/arduino_io.h:67:2: error: #error "Arduino pin mapping not defined for this board"

Залез в последний файлик, вместо Atmega8, подправил на 16. И увеличил диапозон пинов от 13 до 15:

Скетч загрузился в атмегу 16 благополучно без ошибок но на фото 1 всё видно, точнее ничего.

Проверил подключение, всё верно. Подключил вот так;

Ребята, финальный забег. Я в тупике, не знаю куда дальше, хоть намекните что то.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Я не уверен, что вся эта халабуда взлетит на частоте 1 мегагерц - у меня уже на 12 были проблемы с библиотекой LiquidCrystal.

Подозреваю, что с библиотекой на этот ЖК дела обстоят не лучше при работе на низких частотах МК.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Да мне хоть что то зажеть, с осцелятором потом решать буду.

и LiquidCrystal мне тут не нужна

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

Да мне хоть что то зажеть, с осцелятором потом решать буду.

и LiquidCrystalмне тут не нужна

Я и не предлагаю вам LiquidCrystal - я говорю, что может не заработать на частоте 1 мегагерц.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Тогда понял. Возвращаюсь к осцелятору. А пока буду презнателен если поможете с предидущими двумя вопросами, как убрать из показаний сотые доли (чень мешает) и какая ошибка в коде что выводит только одно графическое изображение.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Тогда понял. Возвращаюсь к осцелятору. А пока буду презнателен если поможете с предидущими двумя вопросами, как убрать из показаний сотые доли (чень мешает) и какая ошибка в коде что выводит только одно графическое изображение.

Я не программист, но кусок для рисования медицинского градусника сделал бы так:

if (tc <= 0) {GLCD.DrawBitmap(The16x64_0, 0, 0);}
if (tc > 0 && tc <= 5) {GLCD.DrawBitmap(The16x64_5, 0, 0);}
if (tc > 5 && tc <= 10) {GLCD.DrawBitmap(The16x64_10, 0, 0);}
if (tc > 10 && tc <= 15) {GLCD.DrawBitmap(The16x64_15, 0, 0);}
if (tc > 15 && tc <= 20) {GLCD.DrawBitmap(The16x64_20, 0, 0);}
if (tc > 20 && tc <= 25) {GLCD.DrawBitmap(The16x64_25, 0, 0);}
if (tc > 25 && tc <= 30) {GLCD.DrawBitmap(The16x64_30, 0, 0);}
if (tc > 30 && tc <= 35) {GLCD.DrawBitmap(The16x64_35, 0, 0);}
if (tc > 35) {GLCD.DrawBitmap(The16x64_38, 0,  0);}

зы

Субъективно - как-то уныло это всё: шикарный графический LCD, на который можно вывести информативную и читаемую шкалу и рисунок градусника, снова всматриваетмся "где эта грёбаная рисочка со ртутью!".

зызы

перевод сотых в десятичные - формула: прибавить к модулю числа 0.05, умножить число на 10, выделить целую часть, разделить на 10... я не программист - пусть оне напишут.

Snubist
Offline
Зарегистрирован: 18.02.2013

Клапауций пишет:

зызы

перевод сотых в десятичные - формула: прибавить к модулю числа 0.05, умножить число на 10, выделить целую часть, разделить на 10... я не программист - пусть оне напишут.

А может просто использовать integer, а не float?

Здеся float tc = (float)raw / 16.0;

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Я "крутился" около этой "&&" но так и не подошёл, спасибо. По поводу медецинского градусника, ну вот так захотелось, отобнажение на цифровом термометре аналогово )). Шаг 5 градусов, позже планирую уменьшить до одного, но это уже если запущу на меге16. Да и нарисовать можно и другое, так что ещё "бэта" версия будет. Но чтоб вывести показания ещё одного датчика нужно избавиться от сотых. Я так понял из устного изложения формулы при значениях сотых кратных 0,05 и выше, данные будут округляться до 0,1, это так и надо, попробую поколдовать.

Если кто подскажет немного, замечательно будет.

Клапауций
Offline
Зарегистрирован: 10.02.2013

Snubist пишет:
А может просто использовать integer, а не float?

Здеся float tc = (float)raw / 16.0;

Я бы не заморачивался, внутри программы работал бы с данными, которые выдаёт датчик, а индикацию вывел бы в целых единицах, если так уж раздражает чехарда с сотыми - всё-равно датчик врёт на более чем полградуса.

int t = tc

__Alexander
Offline
Зарегистрирован: 24.10.2012

так это... вот короче

GLCD.print(float, digits);

digits - кол-во символов после точки.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Я так понял из устного изложения формулы при значениях сотых кратных 0,05 и выше

Я не в курсе, как нынче в школе учат - ну, типа, если 0,04, то 0, а если 0,05, то 0,1.

Есть ещё и банквское округление, что бы не накручивали миллионы на мелких транзакциях.

Клапауций
Offline
Зарегистрирован: 10.02.2013

__Alexander пишет:

так это... вот короче

GLCD.print(float, digits);

digits - кол-во символов после точки.

Совсем другое дело - подозревал, что должно это дело быть формализовано в языке.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Согласен с тем, что лучше колбаситься у уже полученными показаниями с датчика. 

"__Alexander" пишет:
digits - кол-во символов после точки

Как применить?

 

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

hugoboss317 пишет:

Согласен с тем, что лучше колбаситься у уже полученными показаниями с датчика. 

"__Alexander" пишет:
digits - кол-во символов после точки

Как применить?

а что? не хочет?

вот строка

 if(tc < 0.0) GLCD.print(tc);

сделайте

GLCD.print(tc, 1);
hugoboss317
Offline
Зарегистрирован: 21.03.2013

"__Alexander" пишет:
сделайте    GLCD.print(tc, 1);

Да, подучилось, всё гениальное просто))). Спасибо.

Хотелось бы понять что это значит: (tc, 1)?

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

hugoboss317 пишет:

"__Alexander" пишет:
сделайте    GLCD.print(tc, 1);

Да, подучилось, всё гениальное просто))). Спасибо.

Хотелось бы понять что это значит: (tc, 1)?

я же выше писал, это количество разрядов после точки.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вы писали

"" пишет:
digits - кол-во символов после точки

но я digits никуда не вставлял.

__Alexander
Offline
Зарегистрирован: 24.10.2012

hugoboss317 пишет:

но я digits никуда не вставлял.

окей! )

hugoboss317
Offline
Зарегистрирован: 21.03.2013

))), вот и я говорю, работает, а как не понятно. 

А если задачу усложнить!?

Целые числа писать одним шрифтом, а десятые доли другим?

__Alexander
Offline
Зарегистрирован: 24.10.2012

с флоат это немного геморойно.

лучше тогда действительно делайте тип int и от него пляшите. Тем более, что деление на 16 (которое у вас в коде) заменяется простым сдвигом вправо на 4-ре разряда.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

"__Alexander" пишет:
GLCD.print(float, digits);

Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:

"__Alexander" пишет:
GLCD.print(float, digits);

Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?

quote="__Alexander"]GLCD.print(число с плавающей запятой, количество знаков после запятой)

Как количество знаков после запятой определяется? - вы же сами сказали "показывать один знак"

(tc, 1)

__Alexander
Offline
Зарегистрирован: 24.10.2012

hugoboss317 пишет:

"__Alexander" пишет:
GLCD.print(float, digits);

Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?

та блин, digits это просто описание аргумента функции. Вы его нигде не дефайнили, а просто указали явно, в виде числа!

Хотите, сделайте по дефайну.

#define digits  1

GLCD.print(tc, digits);

и будет тоже самое.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Прошил фьюзы под внешний осцелятор, Мега16 умер, ну или потерен, как описывалось. Осцелятор установлен (16,000) . Попробовал загрузить скетч, выдаёт такое:

Перед прошивкой фьюзов, проверил всё 5 раз, сразу прицепил осцелятор. После прошивки USB программатор уже прочитать его не смог. Говорит, не нашёл.

Ну вот как никогда совет нужен.

P.S. Фьюзы сконфигурировал "1000" по даташиту это от 8.0 до 12.0 мГц.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Прошил фьюзы под внешний осцелятор, Мега16 умер, ну или потерен, как описывалось. Осцелятор установлен (16,000) . 

Теперь мега ждёт, когда вы к ноге XTAL1 внешний осциллятор(генератор) подключите.

Внешний осциллятор != Ext Crystal Rezonator

Попробуйте взять сигнал тактирования с ноги XTAL2 Ардуино, т.е. XTAL2(Ардуино) -> XTAL1(мега16)

hugoboss317 пишет:
P.S. Фьюзы сконфигурировал "1000" по даташиту это от 8.0 до 12.0 мГц.

Это рассказ ниочём - для полного понимания произошедшего нужно давать фьюзы в полном HEX формате.

пример:

high byte = 0xc9

low byte = 0x9f
 
зы
Шить из командной строки avrdude - в пень эти гуёвые приблуды по которым непонятно, что делаешь.
примерно так: avrdude -p atmega16 -c USBasp -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:

Теперь мега ждёт, когда вы к ноге XTAL1 внешний осциллятор(генератор) подключите.

Я прошивал с уже подключенным, т.к. при гонфиге под внутренний, внешний на пинах не мешает, а если наоборот, может случится то, что случилось.

Клапауций пишет:
Внешний осциллятор != Ext Crystal Rezonator

С этим что делать?

Клапауций пишет:
Попробуйте взять сигнал тактирования с ноги XTAL2 Ардуино, т.е. XTAL2(Ардуино) -> XTAL1(мега16)

Вот это попробую, но, как я понял, для подобной операции необходима соответствующая установка фьюзов меги16, хотя хуже не сделаю, попробую.

Клапауций пишет:

пример:

high byte = 0xc9

low byte = 0x9f
 
Шить из командной строки avrdude - в пень эти гуёвые приблуды по которым непонятно, что делаешь.
примерно так: avrdude -p atmega16 -c USBasp -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m

Вот "примерно так" и можно накуралесить что МК-шку выкинуть можно будет, если открывается понятный интерфейс, читает фьюзы, их-же можно подправить и прошить, так чем это плохо, а в командной строке пропустил запятую и плюёшь в монитор "что тебе надо ещё". Вы написали пример, а где я узнаю каким  какой бит есть или должен быть, и догадываюсь, что в командной строке вышеуказанного будет мало.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Вот "примерно так" и можно накуралесить что МК-шку выкинуть можно будет

Так уже почти можно выбросить...

Я так понял, вы и половины того, что я написал не поняли:

- вы выставили фьюзы для внешнего генератора, а нужно было для внешнего кварца.

- теперь для смены фьюзов нужно МК завести от внешнего генератора.

- сигнал внешнего генератора берите от Ардуино, нога XTAL2 и шейте фьюзы нужные, предварительно всюда публикуйте в понятном людям виде(HEX).

Главное - фьюзы какие выставили, не кусок из даташита, а в HEX-формате, что бы оценить полностью степень надругательства над чипом

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Вы написали пример, а где я узнаю каким  какой бит есть или должен быть, и догадываюсь, что в командной строке вышеуказанного будет мало.

Берёте из моего примера циферки и вбиваете в понятную вам программу, где видите что вам желается.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вот проделал подобное для attiny2313, считал, вроде как получается от внутреннего на 8,0 мГц 

Установил, вроде как от внутреннего на 1,0мГц. И толже потерял

ПИПЕЦ. Прошил фьюзы.

P.S. Куда тут циферки вставлять. Это единственная прога, которая увидела програматор

Клапауций
Offline
Зарегистрирован: 10.02.2013

Зайдите сюда http://radioshemi.ucoz.ru/FUSI/calc.html?part=ATtiny2313 и выставьте в разделе 

Биты конфигурации для PonyProg

фьюзы аналогично тому, как вы выставили, затем посмотрите в раздел

 

Конфигурация

увидите, что не все комбинации фьюзов являются правильными и имеющими хоть какой-то смысл.

зы

Что делать? - больше так не делать.

Для программатора usbasp существует прекрасный консольный софт avrdude для программирования - пользуйтесь им.

Для визуализации и расшифровки фьюзов просто найдите понятный вам и вразумитеьный калькулятор фьюзов.

Если так ж хочется пользоваться оболочкой для avrdude - найдите со встроенным калькулятором фьюзов.

То, чем вы пользуетесь - вам не помогает.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

 

Клапауций пишет:
Что делать? - больше так не делать.

Так что, всё, залочил два контройлера?

Клапауций пишет:
прекрасный консольный софт avrdude для программирования - пользуйтесь им..

Обажаю такие проги, которые при запуске на долю секунды показывают что то  в командной строке и...... а дальше???...

Я ж говорю что "USBASP_AVRDUDE_PROG" единственное что вобще запустилось и увидело программатор.

Сегодня купил Atmega32 на 16-й всё равно всё бы не влезло, но жаль его. А этот теперь боюсь трогать. Посмотрел по ссылке, такую же конфигурацию SUT и CKSEL выставлял.












{

Итог = два мертвеца;

&& бутылка рома;

}

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вобщем парни вы правы, если нет мозгов плять, то и нехрен туда лезть. Пошёл я на гараже ворота красить и ещё надо ремкомплект на рулевую рейку поставить, а то как масло нагреется, туговат руль. Это на пару дней под машиной, может остыну, успокоюсь и продолжу или выкину этот храм и буду дальше рерюшки с транзисторами паять.

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
Так что, всё, залочил два контройлера?

Если указать avrdude вместо фьзов случайные числа, то он прошьёт ближайшее по значению нечто правильное - можно, таки попробовать затактировать МК от внешнего генератора.

hugoboss317 пишет:
Обажаю такие проги, которые при запуске на долю секунды показывают что то  в командной строке и...... а дальше???...

Если вы не умеете пользоваться компьютером, то при чём здесь "такие проги"?

запускайте консоль из папки так, что бы не мелькало.

cmd /K D: && cd "D:\Program Files mini\avrdude-5.11-Patch7610" // D:\Program Files mini\avrdude-5.11-Patch7610 папка с дудкой. 

hugoboss317 пишет:
Я ж говорю что "USBASP_AVRDUDE_PROG" единственное что вобще запустилось и увидело программатор.

Видимо, и не нужны никому эти приблуды поверх дудэ, поэтому и нет их нормальных, которые есть только запутывают пользователя.

Повторюсь - в калькуляторе фьюзов(полно в инете и я вам дал) генерите фьюзы, и вбиваете в командную строку. При таком подходе ошибки исключены.

hugoboss317 пишет:
Посмотрел по ссылке, такую же конфигурацию SUT и CKSEL выставлял.

Если бы такую, то всё бы работало.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:
Если бы такую, то всё бы работало.

CKSEL записал перед загрузкой в свой Atmel блокнот, это 1000. SUT не помню, т.к. не трогал но....

при любом раскладе вот как. (Поздно додумался скрин сделать). Осцелятор, как я уже писал, поставил ещё до рошивки, только на 16,000, думаю попробовать на 12,000, это как последняя надежда.

А с тинькой действительно ложанулся, выставил 0001, такой комбинации вобще нет при любых SUT.

Дуду так и не запускается, сделал как сказали. А есть проги чтоб заливать скетч не через дуньку, а сразу через пограматор USBasp?

тиняк ещё несколько штук есть, заводская установка на внутренний 8 мГц, но при работе частота падает, вот и хотел оставить на внутреннем на 4 мГц , сейчас ещё один на казнь поведу.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

О...о....о...о, так я мегу 16 под внешний (не осцелятор) источник поставил?

А если в МК нельзя выставить SUT (Atmega32A) , прога имеет только Atmega32, в котором вытавляются эти фьюзы, попробовать прошить можно?(Atmega32A)

 

Последний вопрос снимается, можно. П Р О В Е Р Е Н Н О.))) Прошил под внутренний на 8.0

Клапауций
Offline
Зарегистрирован: 10.02.2013

hugoboss317 пишет:
CKSEL записал перед загрузкой в свой Atmel блокнот, это 1000. SUT не помню, т.к. не трогал но....

 

при любом раскладе вот как. (Поздно додумался скрин сделать). 

При каком раскладе?

Прекращайте ерундой заниматься - я вам пояснил с самого начало, что нужно делать.

Повторю ещё раз - фьюзы писать напамять вкуда угодно в HEX-формате, что бы можно было и самому посмотреть и людям показать, скриншоты непонятно чего - мне лично не понятны и не нужны, т.к. и так ясно, что в результате фьюзы прошиты были неправильно.

hugoboss317 пишет:
Дуду так и не запускается, сделал как сказали.

Я вам показал способ запуска CMD из папки с дудой - введите в открывшемся окне avrdude.

hugoboss317 пишет:
О...о....о...о, так я мегу 16 под внешний (не осцелятор) источник поставил?

Откуда я знаю, если вы сами не помните, фьюзы.