Отговори на тема  [ 41 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща
RS232 на PIC12F675 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
valioman написа:
я пробвай с това ще захапе ли без кварц

закачи едно диодче на А1 да видиш ще замига ли???

Не !
Изключих всичко и оставих един гол пик с един диод на А1 и си направих един цикъл да мига диода, но не !
Вероятно немога да конфигурирам правилно порт_а.
От там идва проблема...
Бихте ли ми помогнали, защото с 16F877A нямам никакви проблеми. Работи си всичко без специални настройки.
А с този 12F675.... Аз и на асемблер трудно се оправях с него. (относно конфигуриране на входове и изходи).


Вто Юли 03, 2007 5:34 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
То си е същото като в другите пикльовци, само че имаш един порт кръстен GPIO, SFR регистър който е на адрес 0x05 в банка 0 и TRISIO, който е в 0x05 в банка 1 (0x85). На същия адрес в 877 (и повечето 16-ки) е PortA и TrisA респективно. В CCS:
Код:
#BYTE PORTA = 0x05
#BYTE TRISA = 0x85
#BIT LED = PORTA.0

void main(){
... // изключваш CCP и AN модулite ако ще ползваш A0-A2

TRISA = 0; // всичко без A3 става изходи
PORTA = 0; // 0 на всички изходи

LED = 1; // A0 става "1"


Вто Юли 03, 2007 6:00 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Predator_MF написа:
То си е същото като в другите пикльовци, само че имаш един порт кръстен GPIO, SFR регистър който е на адрес 0x05 в банка 0 и TRISIO, който е в 0x05 в банка 1 (0x85). На същия адрес в 877 (и повечето 16-ки) е PortA и TrisA респективно. В CCS:
Код:
#BYTE PORTA = 0x05
#BYTE TRISA = 0x85
#BIT LED = PORTA.0

void main(){
... // изключваш CCP и AN модулite ако ще ползваш A0-A2

TRISA = 0; // всичко без A3 става изходи
PORTA = 0; // 0 на всички изходи

LED = 1; // A0 става "1"

#include "D:\picprocesori\project\12f675.h"
#BYTE PORTA = 0x05
#BYTE TRISA = 0x85
void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
TRISA = 0
PORTA = 0
While (true)
{ OUTPUT_HIGH(PIN_A1);
delay_ms (1000);
OUTPUT_LOW(PIN_A1);
delay_ms (1000);
}

}

Ами неиска и неиска да стане .... :( Къде бъркам ?!


Вто Юли 03, 2007 6:08 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Светодиода ти не бачка, да не си го вързал наобратно :D Успокой се малко и си огледай хардуера, може да бъркаш захранване или нещо подобно


Вто Юли 03, 2007 8:01 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Predator_MF написа:
Светодиода ти не бачка, да не си го вързал наобратно :D Успокой се малко и си огледай хардуера, може да бъркаш захранване или нещо подобно

:) стига бре ....
та написах код на асемблер за мигащ светодиод и на същата платка заработи без никакъв проблем.
Егати идиотската работа ...
Вече незнам какво да си мисля ...
хардуера е бомба .. работи си без никакви пр0облеми...
Като запиша кода с icprog и ми дава грешка, че не е калибриран осцилатора ?!
Това има ли някакво значение ?


Вто Юли 03, 2007 11:30 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Има разбира се, добави това в началото на кода:

Код:
#ROM 0x3FF= {0x34C0} // Calibration Word

това C0 ти е calibration-а за OSCCAL, а 34 e RETLW, при стартиране PIC-а тръгва да чете там и като имаш 3FFF (ADDLW 0xFF) проца се ресетва :)
Най-вероятно си го затрил при програмиране и затова се дъни :)


Сря Юли 04, 2007 12:15 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Predator_MF написа:
Има разбира се, добави това в началото на кода:

Код:
#ROM 0x3FF= {0x34C0} // Calibration Word

това C0 ти е calibration-а за OSCCAL, а 34 e RETLW, при стартиране PIC-а тръгва да чете там и като имаш 3FFF (ADDLW 0xFF) проца се ресетва :)
Най-вероятно си го затрил при програмиране и затова се дъни :)

Вече работи генератора ;)
За съжаление явно няма да стане да предавам по RS 232 с този пик.
Излизат само йероглифи :(
Явно не работи стабилно без кварцов резонатор ....


Сря Юли 04, 2007 12:48 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Грешката ти е някъде другаде. Трябва да работи стабилно. Правил съм го. С вътрешния осцилатор RS- а не се дънеше дори при захранващо напрежение около 2 волта - макар че с такова захранване и ПИК-а дори не би трябвало да запали :D Ама не знам, може моите процесори да са били сбъгясани нещо :D


Сря Юли 04, 2007 12:54 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
#include "D:\picprocesori\project\12f675.h"
#ROM 0x3FF= {0x34C0} // Calibration Word

void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
puts ("RS232 Komunikacia -Test");
While (true)
{
}
}






#include <12F675.h>
#device adc=8
#ROM 0x3FF= {0x34C0} // Calibration Word
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BANDGAP_HIGH
#use delay(clock=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_A2,rcv=PIN_A3,bits=8)


При еднакви скорости (2400)
ми изписва на екрана това :
HTlXДt[[UWQ!W–ќiGс


Сря Юли 04, 2007 12:59 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Е това C0 си го измислих в движение, видях го на един от моите PIC-ове, с такъв OSCCAL дойде заводски, ще трябва да намериш друг чип от същата партида и да му изчетеш 0x3FF за да видиш каква е стойността.

Иначе на 38400 съм пускал с вътрешен RC и нямаше проблеми :)

PS: И спри да го пишеш червено, че ще ни извадиш очите, ползвай Code функцията като постваш


Сря Юли 04, 2007 2:13 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 06, 2005 2:06 pm
Мнения: 194
Местоположение: Sofia
Мнение 
Вземи си друг процесор на който не си му затрил калибрацията на осцилатора. Майкрочип имат обяснение някъде как сам да си го калибрираш. От тази дума (C0) са важни старшите пет бита, като всяка единица променя честотата с около процент и нещо. Имай на в предвид че на всеки процесор е различно.


Сря Юли 04, 2007 2:17 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
rumen65 написа:
Вземи си друг процесор на който не си му затрил калибрацията на осцилатора. Майкрочип имат обяснение някъде как сам да си го калибрираш. От тази дума (C0) са важни старшите пет бита, като всяка единица променя честотата с около процент и нещо. Имай на в предвид че на всеки процесор е различно.

Да ! голям късмет, че имах още един неизползван чип от тази партида и успях да прочета 3440.
:) сега работят и 3 те нормално ..... ЕВРИКАААААААА :)
Остана ми един от друга партида за който 3440 не важи :(
И сега незнам какво да го правя ....


Сря Юли 04, 2007 6:40 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Код:
for (i=0; i<OSCCAL_MAX;i++)
{
OSCCAL = i;
printf("OSCCAL = %02x",i);
delay_ms(10);
}


Тури ей това в програмата и гледай на терминала кога ще изкочи текста :D

PS: Като минем през Севлиево очакваме камионче с бира :D


Сря Юли 04, 2007 6:44 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Predator_MF написа:
Код:
for (i=0; i<OSCCAL_MAX;i++)
{
OSCCAL = i;
printf("OSCCAL = %02x",i);
delay_ms(10);
}


Тури ей това в програмата и гледай на терминала кога ще изкочи текста :D

PS: Като минем през Севлиево очакваме камионче с бира :D

Хаха :) Цистерна с бира ;)
Много ти благодаря за търпението, което прояви :D
Дано някои хора последват примера ти и бъдат по-дружелюбни.
Благодаря и на останалите участници в темата :D


Сря Юли 04, 2007 7:07 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Ное 25, 2005 11:05 pm
Мнения: 67
Мнение 
Два варианта за възстановяване на OSCCAL


Вто Юли 10, 2007 1:25 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 41 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни