Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
PIC контроллеры. Программаторы и первый проект на PIC |
Программирование микроконтролеров,ремонт аудио/видео/бытовой техники,полезные устройства для дома,телефония, обсуждение статей журнала Радио |
|
Опции темы |
08.05.2010, 20:04 | #481 | |
Форумец
|
Цитата:
1. У меня допустим таких телефонов нет, а искать раритет для одного раза не очень тянет. Ну разве что если кто подарит. Опять же, если сегодня найду телефон, а завтра может уже и не найдешь. Опять же прошивка - демо, а исходники? Опять изобретать велосипед? 2. Опять же предложенное направление мало перспективное. Для разработки устройств с GSM каналом выпускаются специально заточенные модули (недавно уже упоминал - например, SIM300 в разных модификациях - http://www.terraelectronica.ru/catal...&Gde=2&PageS=1 и цены не заоблачные) под которые разработчики пердлагают и протоколы и исходные коды и демо-платы. А если все открыто и большинство с этим работает, то и спросить про непонятное можно и поделиться опытом. |
|
11.05.2010, 22:53 | #482 |
Форумец
Сообщений: 206
Регистрация: 03.02.2009
Возраст: 47
Не в сети |
полностью согласен с petrd насчет сименсов
к сожалению, умерли они(( а из дешевых и ныне выпускаемых только самсунг делает некоторые модели с rs-232 (например, Е1100), но информации по ним, мягко говоря недостаточно |
31.05.2010, 08:32 | #484 |
Форумец
Сообщений: 129
Регистрация: 18.02.2009
Возраст: 43
Не в сети |
Брал месяца полтора назад в Радионе на Чайковского. Вот только не помню - L или нет. Скорее всего обычная. Низковольтная мега - это критично для Вас?
|
02.06.2010, 21:10 | #488 |
КваДраНутыЙ
Сообщений: 1,435
Регистрация: 29.05.2010
Не в сети |
|
16.06.2010, 14:02 | #490 |
Форумец
|
|
22.06.2010, 07:24 | #492 | |
Форумец
|
Цитата:
А насчет PCF8583, обмен по шине есть? Кварц работает? Что с битом старта? |
|
23.06.2010, 09:43 | #493 | |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
Цитата:
|
|
23.06.2010, 10:17 | #494 |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
чтение
struct TTime { char year, month, day, hours, minutes, seconds; } TimeRead; char yearmod4, byteRead; void Display_Time() { char txt[11]; // output values to LCD display txt[0] = (TimeRead.day / 10) + 48; txt[1] = (TimeRead.day % 10) + 48; txt[2] = '/'; txt[3] = (TimeRead.month / 10) + 48; txt[4] = (TimeRead.month % 10) + 48; txt[5] = '/'; txt[6] = '2'; txt[7] = (TimeRead.year / 100) + 48; txt[8] = ((TimeRead.year % 100) / 10) + 48; txt[9] = (TimeRead.year % 10) + 48; txt[10] = 0; // null to terminate the string Lcd_Out(1,7,txt); txt[0] = (TimeRead.hours / 10) + 48; txt[1] = (TimeRead.hours % 10) + 48; txt[2] = ':'; txt[3] = (TimeRead.minutes / 10) + 48; txt[4] = (TimeRead.minutes % 10) + 48; txt[5] = ':'; txt[6] = (TimeRead.seconds / 10) + 48; txt[7] = (TimeRead.seconds % 10) + 48; txt[8] = 0; // null to terminate the string Lcd_Out(2,7,txt); } void ReadTime() { char updateYear; updateYear = 0; I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8583 I2C_Wr(2); // first word address I2C_Repeated_Start(); // issue repeated start signal I2C_Wr(0xA1); // address PCF8583 for reading R/W=1 byteRead = I2C_Rd(1); // read seconds byte TimeRead.seconds = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform seconds while (I2C_Is_Idle() = 0) // this lines are not neccessary in new versions asm nop; // starting from mikroC 6.0.0.1 byteRead = I2C_Rd(1); // read minutes byte TimeRead.minutes = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform minutes while (I2C_Is_Idle() = 0) asm nop; byteRead = I2C_Rd(1); // read hours byte TimeRead.hours = (byteRead >> 4)*10 + (byteRead & 0x0F); // transform hours while (I2C_Is_Idle() = 0) asm nop; byteRead = I2C_Rd(1); // read year/day byte TimeRead.day = ((byteRead & 0b00110000) >> 4)*10 + (byteRead & 0x0F); // transform day yearmod4 = (byteRead & 0b11000000) >> 6; // get year mod 4 from RTC while (I2C_Is_Idle() = 0) asm nop; byteRead = I2C_Rd(0); // read weekday/month byte TimeRead.month = ((byteRead & 0b00010000) >> 4)*10 + (byteRead & 0x0F); // transform month while (I2C_Is_Idle() = 0) asm nop; I2C_Stop(); I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8583 I2C_Wr(0x10); // first word address I2C_Repeated_Start(); // issue repeated start signal I2C_Wr(0xA1); // address PCF8583 for reading R/W=1 byteRead = I2C_Rd(0); // read year if (yearmod4 != byteRead % 4 ) { // check if year is incremented in RTC byteRead++; // in this case the new value should be written to RTC RAM at address 16(0x10) updateYear = 1; } TimeRead.year = byteRead; while (I2C_Is_Idle() = 0) asm nop; I2C_Stop(); if (updateYear > 0) { I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8530 I2C_Wr(0x10); // start from word at address 16 I2C_Wr(TimeRead.year); // write year to RAM I2C_Stop(); // issue stop signal } } void MainInit() { ANSEL = 0; ANSELH = 0; Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); Lcd_Cmd(LCD_CLEAR); Lcd_Cmd(LCD_CURSOR_OFF); LCD_Out(1,1,"Date: / /"); LCD_Out(2,1,"Time: : :"); I2C_Init(100000); // initialize I2C } void main() { MainInit(); while (1) { ReadTime(); Display_Time(); Delay_ms(1000); } } запись struct TTime { char year, month, day, hours, minutes, seconds; } TimeToWrite; void main() { TimeToWrite.year = 7; // 2007 (offset from 2000) TimeToWrite.month = 12; TimeToWrite.day = 31; TimeToWrite.hours = 23; TimeToWrite.minutes = 59; TimeToWrite.seconds = 40; I2C_Init(10000); // initialize full master mode I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8583 I2C_Wr(0); // start from word at address 0 (configuration word) I2C_Wr(0x80); // write 0x80 to config. (pause counter...) I2C_Wr(0); // write 0 to cents word I2C_Wr(((TimeToWrite.seconds/10)<<4) + (TimeToWrite.seconds%10)); // write seconds word I2C_Wr(((TimeToWrite.minutes/10)<<4) + (TimeToWrite.minutes%10)); // write minutes word I2C_Wr(((TimeToWrite.hours/10)<<4) + (TimeToWrite.hours%10)); // write hours word I2C_Wr(((TimeToWrite.year%4)<<6) + ((TimeToWrite.day/10)<<4) +(TimeToWrite.day%10)); I2C_Wr(((TimeToWrite.month/10)<<4) + (TimeToWrite.month%10)); // write weekday/month I2C_Stop(); // issue stop signal I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8530 I2C_Wr(0x10); // start from word at address 16 I2C_Wr(TimeToWrite.year); // write year to RAM I2C_Stop(); // issue stop signal I2C_Start(); // issue start signal I2C_Wr(0xA0); // address PCF8530 I2C_Wr(0); // start from word at address 0 I2C_Wr(0); // write 0 to config word (enable counting) I2C_Stop(); // issue stop signal } пожалуйста обьясните вчем моя ошибка? PCF подключена SCL, SDA и все время идет НАРМАЛЬНО НО через две сикунды тоесть 32, 36, 38, 40 Последний раз редактировалось moorzik; 23.06.2010 в 10:40. Причина: балбес |
23.06.2010, 13:03 | #495 | |
Форумец
|
Цитата:
2. Частота кварца контроллера какая (случайно не 4 МГц?) и какой контроллер, на чем смотрите - железо или Proteus? 3. А две секунды на ЖКИ - соответствуют реальным двум секундам или нет? 4. A0 на землю, INT - никуда, в этом коде он не используется. 5. Код откуда взят? |
|
23.06.2010, 13:11 | #496 | |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
Цитата:
смотрю на железе 2) секунды соответствуют, временя все соответствует токое впечатление что или s2 шина тармазит (или как всегда я ) код с примера взят |
|
23.06.2010, 13:49 | #497 |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
как говорится низная брода ни лези в брод.
как всегда сам виноват надыбал подозрительный код и сибе голову сломал и людей заморочал. типерь нашел другой код единственное задержку уменьшил до 500 мс. вот код опять таки с примера. char seconds, minutes, hours, day, month, year; // Global date/time variables // Software I2C connections sbit Soft_I2C_Scl at RC3_bit; sbit Soft_I2C_Sda at RC4_bit; sbit Soft_I2C_Scl_Direction at TRISC3_bit; sbit Soft_I2C_Sda_Direction at TRISC4_bit; // End Software I2C connections // LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections //--------------------- Reads time and date information from RTC (PCF8583) void Read_Time() { Soft_I2C_Start(); // Issue start signal Soft_I2C_Write(0xA0); // Address PCF8583, see PCF8583 datasheet Soft_I2C_Write(2); // Start from address 2 Soft_I2C_Start(); // Issue repeated start signal Soft_I2C_Write(0xA1); // Address PCF8583 for reading R/W=1 seconds = Soft_I2C_Read(1); // Read seconds byte minutes = Soft_I2C_Read(1); // Read minutes byte hours = Soft_I2C_Read(1); // Read hours byte day = Soft_I2C_Read(1); // Read year/day byte month = Soft_I2C_Read(0); // Read weekday/month byte Soft_I2C_Stop(); // Issue stop signal } //-------------------- Formats date and time void Transform_Time() { seconds = ((seconds & 0xF0) >> 4)*10 + (seconds & 0x0F); // Transform seconds minutes = ((minutes & 0xF0) >> 4)*10 + (minutes & 0x0F); // Transform months hours = ((hours & 0xF0) >> 4)*10 + (hours & 0x0F); // Transform hours year = (day & 0xC0) >> 6; // Transform year day = ((day & 0x30) >> 4)*10 + (day & 0x0F); // Transform day month = ((month & 0x10) >> 4)*10 + (month & 0x0F); // Transform month } //-------------------- Output values to LCD void Display_Time() { Lcd_Chr(1, 6, (day / 10) + 48); // Print tens digit of day variable Lcd_Chr(1, 7, (day % 10) + 48); // Print oness digit of day variable Lcd_Chr(1, 9, (month / 10) + 48); Lcd_Chr(1,10, (month % 10) + 48); Lcd_Chr(1,15, year + 56); // Print year vaiable + 8 (start from year 2008) Lcd_Chr(2, 6, (hours / 10) + 48); Lcd_Chr(2, 7, (hours % 10) + 48); Lcd_Chr(2, 9, (minutes / 10) + 48); Lcd_Chr(2,10, (minutes % 10) + 48); Lcd_Chr(2,12, (seconds / 10) + 48); Lcd_Chr(2,13, (seconds % 10) + 48); } //------------------ Performs project-wide init void Init_Main() { TRISB = 0; PORTB = 0xFF; TRISB = 0xff; ANSEL = 0; // Configure AN pins as digital I/O ANSELH = 0; Soft_I2C_Init(); // Initialize Soft I2C communication Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear LCD display Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off Lcd_Out(1,1,"Date:"); // Prepare and output static text on LCD Lcd_Chr(1,8,':'); Lcd_Chr(1,11,':'); Lcd_Out(2,1,"Time:"); Lcd_Chr(2,8,':'); Lcd_Chr(2,11,':'); Lcd_Out(1,12,"200"); } //----------------- Main procedure void main() { Delay_ms(2000); Init_Main(); // Perform initialization while (1) { // Endless loop Read_Time(); // Read time from RTC(PCF8583) Transform_Time(); // Format date and time Display_Time(); // Prepare and display on LCD Delay_ms(500); // Wait 1 second } } типерь буду дальше думать. 1) правда есть еще вопрос а как заставить MIKROC pro выводить на LCD дисплей русский текст?? 2) подскажите как лучше сделать. Надо подключить шатл к пику используются две ноги ( условно назовем ноги А , Б) смысл такой крутиш влево садятся на землю А; А+Б; Б крутиш вправо садятся Б; А+Б; А вот я и думаю что получается алгоритм если в состоянии покоя на шатле находится на нагах 11 при повороте получается либо 10 в одну сторону либо 01 вдругую подскажите хотябы намеком как придумать данный опрос Последний раз редактировалось moorzik; 23.06.2010 в 14:25. |
23.06.2010, 20:57 | #498 |
Форумец
|
Что-то Вы не договорили. В примерах к компилятору такого кода нет. Нашел его на сайте MikroE. Меня больше интересовали биты конфигурации к этому примеру. Не зря искал и вот почему - в конфигурации исходного проекта установлен HS генератор, а значит этот код без изменений слова конфигурации не будет работать от внутреннего генератора. А значит Вы изменили внешний генератор на внутренний, но в код никаких изменений не внесли, а это значит, что внутренний генератор работает на 4 Мгц (по умолчанию), а программа-то расчитана на 8 Мгц, в результате все задержки увеличились в 2 раза и delay_ms(1000) отсчитывала не одну секунду, а 2 сек. Отсюда и возникла проблема.
|
23.06.2010, 21:13 | #499 | |
Форумец
|
Цитата:
2. Софтовый I2C тоже хорошо иметь, но только когда нет аппаратного модуля MSSP. 3. Кому Вы лепите неоформатированный код, неужели трудно теги CODE или PHP вокруг кода вставить? 4. Русский текст, например, так: Код:
void LCD_Out_Rus(char row, char column, char *text) { const unsigned char russian_HD44780[]={0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF, 0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7}; if (*text) { if (*text > 191) Lcd_Chr(row, column, russian_HD44780[(*text) - 192]); else Lcd_Chr(row, column, *text); } else return; *text++; while(*text) { if (*text > 191) Lcd_Chr_Cp(russian_HD44780[(*text) - 192]); else Lcd_Chr_Cp(*text); text++; } } ..... LCD_Out_Rus(1,1,"ПРИВЕТ"); ...... |
|
24.06.2010, 08:14 | #500 | |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
Цитата:
нет внешний и внутренний гениратор не трогал как установленно в проект визарде 8 мГц так все и стоит просто выбран проц и влит исходник из примера подскажите где скачать учебник хороший по С Шпака уже читаю! с удовольствием а про шатл вроде все понятно вращаем ручку в право получаем код на ногах 10 11 01 вращаем ручку в лево получаем код на ногах 01 11 10 |
|
24.06.2010, 08:48 | #501 | |
Форумец
|
Цитата:
2. Ищите в гугле Керниган и Ричи "Язык С". |
|
24.06.2010, 09:37 | #503 |
Форумец
|
Это все понятно, это софтовый I2C, меня интересует откуда вот этот код взят http://bvf.ru/forum/showpost.php?p=1...&postcount=494, с него же все началось?
|
24.06.2010, 09:43 | #504 | |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
Цитата:
Код:
http://www.mikroe.com/app/webroot/forum/viewtopic.php?f=10&t=5974 |
|
24.06.2010, 10:12 | #505 |
Форумец
|
Так и я про это, там hex под 8 МГц причем должен внешний кварц, после запуска срабатывает Fail-Safe Clock Monitor (т.к. в слове конфигурации установлен бит FCMEN) и т.к. нет тактов от внешнего HS генератора, то ядро переключается на внутренний RC генератор, а он по умолчанию работает на 4 МГц. А что дальше уже говорил. Вроде все.
|
24.06.2010, 10:26 | #506 | |
Форумец
Сообщений: 12
Регистрация: 04.05.2010
Не в сети |
Цитата:
Подскажите насколь мГц лучше кварц поставить на 16F887 а каким образом происходит выбрка нескольких устройств по С2 шине? Последний раз редактировалось moorzik; 24.06.2010 в 10:45. Причина: Забыл |
|
24.06.2010, 10:44 | #507 |
Форумец
|
Смотря для чего, если надо работать с точными интервалами (частотомер, RS232 и т.п.), то надо кварц ставить или если надо чтобы программа работала быстрее чем 2MIPS (тактовая 8 МГц) максимум до 5MIPS (тактовая 20 МГц). Всяко с кварцем стабильнее будет, но появляются лишние компоненты.
|
24.07.2010, 22:10 | #508 |
Форумец
Сообщений: 8
Регистрация: 24.07.2010
Возраст: 35
Не в сети |
Всем привет!
Только что авторизовался на вашем форуме, понравилась тема про пик. Сам сейчас в вузе начал изучать их, но там только теория без серьезных практических изысканий ,а хочу по-копать контроллеры глубже Как только придет мне заказанный 18ф4550 , начну в железе мигать диодиками и писать всякое на дисплее ,т.е. стартану с простого Но мне очень интересно, как, например, управлять светодиодиками с компа через интерфейс юсб, который поддерживается этим пиком. Ведь нужно написать драйвер какой-нибудь, и сам хотел бы состряпать простенькую оболочку, из которой можно управлять этими светодиодиками. отсюда у меня следующие вопросы: 1) хотел бы понять сам принцип такого управления, как драйвер должен взаимодействовать с этой оболочкой? 2) в чем писать оболочку? я в универе сталкивался с билдер с++ . Он подойдет? 3) как написать драйвер для девайса на пик Пока все. Буду благодарен за любые вспомогательные советы и предложения |
25.07.2010, 09:37 | #509 | |
Форумец
|
Цитата:
http://microchip.com.ru/Support/USB%20apps.html http://www.gamma.spb.ru/articles.php?i=29 http://www.remexpert.com/ipb/topic1953.html http://www.pickit2.ru/doku.php/проек...основе.pickit2 http://www.pickit2.ru/doku.php/проек...основе.pickit2 |
|
25.07.2010, 10:31 | #510 |
Форумец
Сообщений: 8
Регистрация: 24.07.2010
Возраст: 35
Не в сети |
Спасибо за ссылки Даже более, чем достаточно, по-крайней мере, сейчас. Видел по одной ссылке написание оболочки в вижуал с++. Так вот, какую программу легче использовать для данной цели : визуал или билдер?
|