Jump to content

    
Sign in to follow this  
Herz

Даталоггер OWHL

Recommended Posts

Поручили мне повторить этот проект. Он немного устарел уже, но показался вполне выполнимым: комплектующие ещё достать можно и весь процесс расписан очень подробно.

И вот, платы собраны. Наступил этап программирования. Поскольку опыт у меня с Ардуино невелик, с самого начала натолкнулся на трудности.

Первый шаг. Для того, чтобы записать в МК бутлоадер,  предписывается дополнить текстовый файл boards.txt (что находится в папке установки софта Ардуино) следующими строками:

################################################################ 
# For Arduino IDE v 1.6.3 or later
# Tested successfully using Arduino as ISP programmer to burn
# bootloader on OWHL.
# Cut and paste this entry into your existing boards.txt file # found inside the /hardware/arduino/avr/ directory.
# Select the OWHL (8MHz internal clock) entry in the
# Arduino IDE menu under Tools>Board>
OWHLatmega328.name=OWHL (8 MHz internal clock) OWHLatmega328.upload.tool=arduino:avrdude OWHLatmega328.upload.protocol=arduino OWHLatmega328.upload.maximum_size=30720 OWHLatmega328.upload.speed=57600
OWHLatmega328.bootloader.low_fuses=0xE2 OWHLatmega328.bootloader.high_fuses=0xDA OWHLatmega328.bootloader.extended_fuses=0x05
OWHLatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex OWHLatmega328.bootloader.unlock_bits=0x3F OWHLatmega328.bootloader.lock_bits=0x0F OWHLatmega328.bootloader.tool=arduino:avrdude OWHLatmega328.build.mcu=atmega328p
OWHLatmega328.build.f_cpu=8000000L OWHLatmega328.build.core=arduino OWHLatmega328.build.variant=standard
#############################################################

И теперь в списке выбираемых плат в отладчике должна, по идее, появиться следующая: “OWHL (8 MHz internal clock)”

Но, вот какое дело. У меня инсталлированы сразу три отладчика: Arduino v.1.8.16, Arduino IDE v.2.0.0-beta.10 и Visual Studio с плагином vMicro.

И первые две напрочь не видят новой платы в списке. vMicro видит, то есть на изменение файла boards.txt он отреагировал.

Больше того, если я вообще убираю этот файл из своей директории, то "Arduino" и "Arduino IDE" никак этого не замечают: в списке выбора плат у них остались все, что и были.

И лишь vMicro в соответствующей строке меню теперь пишет: "Find or install a board...", то есть не находит списка, что логично.

Складывается впечатление, что первые две программы хранят, на самом деле, свои списки поддерживаемых плат совсем в другом месте.

Кто-нибудь в курсе, где именно?

Share this post


Link to post
Share on other sites
38 minutes ago, Herz said:

Но как он должен называться?  Так же: boards.txt ? Такого больше нигде не видно.

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

Может в новых версиях эта информация лежит в файлах с другим именем.

Share this post


Link to post
Share on other sites

Итак, первый скетч был скомпилирован и залит в МК. Этот скетч должен быть настроить часы реального времени на DS3231 через последовательный порт. Вот такой коротенький код:
 

Скрытый текст



/*	settimeSerial.ino
	Use this to get your real time clock date and time values
	synchronized closely.
	Copyright Luke Miller 2015
	
	To use this program, upload it to your board, then open the
	serial monitor at 57600 baud. Make sure the serial monitor 
	is set to send a 'newline' when you hit return (see the 
	menu in the lower right of the Arduino serial monitor window)
	
	You will be prompted to enter a date and time in the format:
			YYYY MM DD HH MM SS
	using 24hr time format.
	For example, July 8, 2015 at 3:12:30 PM (afternoon) would 
	be entered as:
	2015 7 8 15 12 30
	
	Type that in to the serial monitor window, then wait to hit
	Enter until you reach exactly that time. The new time will be
	uploaded immediately, and the result will be printed to the
	serial monitor. If you miss your time, you can enter a 
	new date and time in the same format and try again without
	needing to reboot. 

*/

#include <Wire.h>
#include <SPI.h>  // not used here, but needed to prevent a RTClib compile error
#include "RTClib.h"


// AVR-based Arduinos (Uno, MEGA etc) use the Wire bus for I2C
// with the pins located near the Aref pin. 
// SAM-based Arduinos (Due) refer to the bus attached to those
// same pins near Aref as "Wire1", so this little block of code
// automagically swaps Wire or Wire1 in as necessary in the 
// main code below. 
//#ifdef __AVR__
//	#define Wire Wire	// For AVR-based Arduinos
//#elif defined(ARDUINO_SAM_DUE)
//	#define Wire Wire1	// for Arduino DUE, Wire1 I2C bus
//#endif


// Setup an instance of DS1307 naming it rtc
// You can leave this unchanged when using a DS3231, since they are
// both updated using the same I2C commands and addresses
RTC_DS1307 rtc;     

// Declare variables to hold user input
uint16_t myyear;
uint8_t mymonth; 
uint8_t myday; 
uint8_t myhour; 
uint8_t myminute; 
uint8_t mysec;
DateTime myTime;
DateTime currTime; 
long millisVal;

void setup() {
	Serial.begin(57600); // adjust your serial monitor baud to 57600 to match
	while (!Serial) {
		; // wait for serial port to connect. Needed for Leonardo only
	}
	Serial.println(F("Hello"));
	
	//Wire.begin();
	rtc.begin();  // Calls Wire.begin() internally
	
	Serial.println(F("Enter a new date and time in the following format")); 
	Serial.println(F("all on one line: "));
	Serial.println(F("\tYYYY MM DD HH MM SS"));
	Serial.println(F("and hit enter when ready to set time"));
	
	millisVal = millis();
	
}

void loop() {
	if (millis() > millisVal + 1000){
		millisVal = millis(); // update millisVal
		currTime = rtc.now(); // read current time from the rtc
		Serial.print(F("RTC time: "));
		char buf[20]; // create a character array to hold the time as a string
		Serial.println(currTime.toString(buf,21)); // print the time as a string
	}
	// When the user has entered a date and time value in the serial 
	// monitor and hit enter, the following section will execute.
	while (Serial.available() > 0) {
		// Expect the year first
		myyear = Serial.parseInt();
		// Expect month next
		mymonth = Serial.parseInt();
		// Expect day next
		myday = Serial.parseInt();
		// Expect hour next
		myhour = Serial.parseInt();
		// Expect minute next
		myminute = Serial.parseInt();
		// Expect second next
		mysec = Serial.parseInt();
		
		// When the enter symbol '\n' comes along, convert the 
		// values to a DateTime object and set the clock
		if (Serial.read() == '\n'){
			myTime = DateTime(myyear,mymonth,myday,myhour,myminute,mysec);
			Serial.println(F("Setting time"));
			rtc.adjust(myTime);
		}
	}
}


 

Но, когда я открываю окно Serial Monitor, то вижу в нём не ожидаемые "Hello" и т.д., а какие-то кракозябры:

Цитата

�x�x�x�x��x�xx�x��x�x�x�x�xx���x�x��x��xx�x�x�xx��x�x��xx�x�x�x�x��x��x��x�x�x���x��x�x�x��x��xx�x��x��x���x��x�x�xx�x�xxx�x�x���x��x���x��x�x��xx�x��x�x����x��xx�x�x�x�x�x�x��x�x�xx��x�x�x��x�x���x�x��xxx��x�x��xx�x�x�x�x��x�x�x�x���x�x�x��x���x�xx�x�x��x��x���x�x�x��xx�x�x�x�x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x�������x��x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x��������x��x��x�x�x��xx�x�x�x����������x�x�x�x�x�x�������x�x������x��xf�f�`�f�f�f���xxp �����������~f�~fxp� �f�f�`~���f���xxp ��� ��������~f�~fx�xf���f�f�`�f�f�f���xxp �����������~f�~fxs� �f�f�`�f�f�f���xxp �����������~f�~fx�怘�f�f�`�f�f�f���xx� �����������~f�~fx|� �f�f�`�f�f�f���xx� �����������~f�~�xxd �f�f�`�f�f�f���xxp ��� ��������~f�~�x�xf���f�f�`�f�f�f���xx� �����������~f�~�x怘�f�f�`~���f���xxp ��� ��������~f�~�x�怘�f�f�`�f�f�f���xx� �����������~f�~�x~l �f�f�`�f�f�f���xx� �����������~f�~�xxf �f�f�`�f�f�f���xx� �����������~f�~�x�xf���f�f�`~���f���xxp �����������~f�~�x怘�f�f�`�f�f�f���xx� �����������~f�~�x�怘�f�f�`�f�f�f���xx� �����������~f�~�x~f �f�f�`�f�f�f���xxx ��� ��������~f�~��f�f�`�f�f�f���xxp �����������~f�~��f�f�`�f�f�f���xx � �����������~f�~`��f�f�`�f�f�f���xx� �����������~f�~x��f�f�`�f�f�f���xxp ��� ��������~f�~���f�f�`�f�f�f���xxp ��� ��������~f�~f��f�f�`�f�f�f���xxp ��� ��������~f�~f��f�f�`�f�f�f���xx� �����������~f�~f`��f�f�`�f�f�f���xxp �����������~f�~fx��

Причём, даже здесь, в виде цитаты, они выглядят иначе, чем в Notepad++:

image.thumb.png.a911d64ec6bf5f228ceb3bea4e32ac48.png

, и иначе, чем в самом окошке Serial Monitor. В чём может быть причина? Битрейт настроен правильно: 57600.

Share this post


Link to post
Share on other sites
7 minutes ago, Herz said:

В чём может быть причина? Битрейт настроен правильно: 57600.

Если сопоставить количество принятых символов и количество переданных, то получается, что со скоростью явно что-то не так. Могу предположить, что мега работает на 1МГц вместо 8. Попробуйте скорость 7200. Ну, или осциллографом.

Share this post


Link to post
Share on other sites

7200 там не выбрать, а вручную не прописывается. Попробую осциллографом.

 

П.С. Несущая, по осциллографу, 14.8кГц. Что, как бы, соответствует битрейту 14400. Тоже в Мониторе не прописан...

Share this post


Link to post
Share on other sites

Можно сначала попробовать передавать один символ 0xFF, потом 0xFE, потом 0xFC, и так далее до 0. Т.е. - постепенно увеличивая длительность импульса лог.0 и следя за результатом приёма. На основании чего сделать вывод о реальной скорости UART.

Share this post


Link to post
Share on other sites

Ну я не знаю как у Вас устроена программа. Если есть возможность как-то в программе управлять выдачей в UART определённых символов (например кнопкой), то можно чтобы при нажатии выдавался 0xFF. Один символ 0xFF. При следующем нажатии = один 0xFE и т.д. И смотреть что приходит и приходит ли.

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

Share this post


Link to post
Share on other sites

Понятно. Подбирая битрейт при последовательном декодировании на осциллографе, смог добиться похожего на правду:

image.thumb.png.63cf72eb30cf2fdfd26cd54e36860cb6.png

Цитата

RTC_time:_2000__01__01_03:22: ...

И это битрейт 29.6 кбод. На 28.8 (что могло быть, если частота осциллятора вдруг вдвое меньше должной) - белиберда. Выходит, частота совсем какая-то неадекватная, далеко не 8 МГц.

Реально это как-то исправить? Или менять чип?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this