Jump to content

on-marr

Members
  • Content Count

    5
  • Joined

  • Last visited

Community Reputation

0 Обычный

About on-marr

  • Rank
    Новенький
  • Birthday 06/24/1977

Информация

  • Пол
    Мужчина
  • Город
    Уфа

Электроника

  • Стаж в электронике
    Не связан с электроникой
  • Сфера радиоэлектроники
    РБ
  • Оборудование
    Мультимер

Recent Profile Visitors

489 profile views
  1. Вот и добрался я до богов контроллера код программы /* * Timer0_At16.c * * Created: 06.09.2014 11:34:33 * Author: Home_on-mars */ #include <avr/io.h> //#include <avr/iom16.h> #include <avr/interrupt.h> typedef unsigned char byte ; byte a,b; ISR(TIMER0_OVF_vect){ b++; } ISR(TIMER0_COMP_vect){ b++; } int main(void) { a=0;b=0; TCCR0|=(1<<0); TCCR0 &=~(0<<WGM00); TCCR0 &=~(0<<WGM01); TIMSK |=(1<<0); asm("sei"); while(1) { a++; } } Но в студии в пошаговом режиме не переходит на прерывание прерывание а висит на а++ хотя b растет по переполнению как настроить студию чтобы показывало (оптимизация стоит 0) Даже в окне disassembly не переходит по прерыванию Помогите настроить или скиньте файл настройки ATMEL STUDIO
  2. Говорил же проект рабочий. Выдает правда голое число. Поставь хоть " V" мол вольты Собери на железе, поставь делитель на резисторах. И вот готовый вольтметр. GCC C Executable Project C/C++ GCC C++ Executable Project C/C++ (вот создав такой проект я намаялся) С++ чтото вроде совместим с кучей языков Пока C# языком разобраться бы. Хотя мне он начинает нравиться. Хочу к твоему проекту добавить бегущую строку. Заработает выложу Как я понял при return ADC возвращает значение ADCL т.е 8 бит. а не 10 как положено. но как это проверить не знаю. При отладке программы на СИ творится кошмар. То в одну библиотеку кидает то в другую. Запутываюсь. После выполнения функции readADC(); (в твоем проекте) возвращает как ADCL так и ADCH. Но считав, присвоив например к переменной ah=ADCH; нужно снова выполнять фунцию readADC(); потому что затираются значения. Пробывал даже считывать с памяти через указатель на переменную например char *datemem,ah,al; // datmem - указатель на ячейку памяти а не сама переменная readADC(); datmem = &ADCH; // получаем адрес переменной в памяти ah = *datmem; // присваеваем к ah по адресу datmem в памяти datmem= &ADCL; al = *datmem; но увы в памяти пропадает второе значение. Не смотрел, помоему адрес попадает в область регистров"а там трудно выжить" в C#. Надо разобраться с настройками АЦП там вроде в каком-то регистре устанавливаешь бит и он не затирается а возвращает последние данные, сам вот только с АЦП начинаю... Хоть тему открывай по отладке.Сам намаялся. Но нашел метод например ..... // ..компилируем открываем IO View и наблюдаем за PORTB DDRB=255; // жмем F11 while (1) { // жмем F11 PORTB=128; // жмем F11 readADC(); // не жмем F11 а переводим курсор на след строку а то можно увидеть "кишки студии" PORTB=ADCH; // жмем CTRL+F10 datmem = &ADCH; // жмем F11 unsigned int ah,al; al=datmem; // запишется млаший байт старший игнорируется PORTB=al; //смотрим datmem сперва младший байт // теперь сташий //int datmemcopy; //datmemcopy= datmem; //делаем копию переменной дабы не поколечить оригинал if (datmem > 255) { datmemcopy=datmem; ah= (datmem/*copy*/ >> 8); // сдвигаем /*копию*/ на 8 бит т.е перетаскиваем старший в младший } else ah=0; // !!! если убрать else то ah=0 всегда PORTB=ah; // жмем F11 datmem=(datmem << 8)+al; // перетаскиваем младший в сташий и восстанавливаем младший // жмем F11 for (int i=0; i < 30000; i++){ // не жмем F11 а устанавливаем мышкой курсор к концу цикла чтоб не жать 30000 раз PORTB=0; } PORTB=0b 00100100; // жмем CTRL+F10 datmem = 0x18; // PORTB или PINB если не ошибаюсь у ATMEGA 8 // жмем F11..... ah= *datmem; // считываем PORTB в переменную ah PORTB=ah; PORTB |=0b10011100; // PORTB=0b10111100 } вот еще некоторый мои шпоры //****************************************макросы***************************************************************************** { #define zamena "Замена" data[]=zamena; // data[]= "Замена" #define uslovie ( a > b ) if uslovie a++; // if (a > b ) a++; #define outstr(s) out(#s) outsrt(Ups);// Анaлогично out("Ups"); #define a_b(x,y) x ## y i=a_b(3,4); // равнозначно i = 34; #undef a_b// отмена макроса } //*************************************прерывания******************************************************************************** пока не дошел //*******************************************EEPROM************************************************************************** { PORTB=0b00000010; // здесь BIT1 = 1 (такая условность в примере BIT = от 0 до 7) while (EECR & 2); // ожидаем окончания предидущей записи 2 = 0b00000010 или (1<<1) // делаем пока EECR BIT1 не будет = 0 т.е. EEWE = 1 EEAR= 0, // адрес EEPROM EEDR= 7; // данные которые надо записать EECR |= 4; // разрешить запись BIT2=1 EECR |= 2; // запись данных BIT1=1 // EECR |= 6;// разрешить запись BIT3=1 и запись данных BIT1=1 в одной команде нельзя while (EECR & (1<<1)); // ожидаем окончания предидущей записи 2 = 0b00000010 или (1<<1) EEAR = 1; EEDR =128; EECR |= 4; // разрешить запись BIT3=1 EECR |= 2; // запись данных BIT2=1 while (EECR & 2); // ожидаем окончания предидущей записи 2 = 0b00000010 или (1<<1) EEAR = 0; // адрес EEPROM EECR |= 1; // чтение из EEPROM в EEDR BIT0=1 m = EEDR; EEPROM_READ_STRING(0,2); // вызов функции . Cчитать 2 байта с адреса 0х00 EEPROM //в массив data[] } //**************************запись - чтение по указатель на переменную*******************************************************************************************
  3. Members. Вопрос не понял.Уточни какой пост зачем пост_иться, какая пост_ичься.... "Издевался" на над твоей прогой. Дошел до того что студия перестала создавать *.Hex файл. а он мне нужен для PonyProg2000. т.к. прошиваю через LTP порт. Ломал голову так и не понял почему. Да еще Lcd_clear(); Lcd_prints(0,1,2,(unsigned char*)PSTR("V")); можно написать так : readADC(); f=ADCH*256; readADC(); f+=ADCL; f=(f*/400); Lcd_printf(4,1,2,f,2); т.к. ADC записывает лишь 10 BIT то точность равна 10BIT - 1024 и это равно 2.56 V ..................................................................... ____ADC______ __коэф____ теперь для перевода ADC в вольты надо (ADCH*256+ADCL) * 2.56V/1024; для Atmega 8 K= 2.56/1024 =1/400 всегда на внут 2.56V + делитель на резисторах ADCSRA |= (1<<ADEN) Задействуем АЦП | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); F/128 == 62500Гц а этот коэффициэнт тут не причем при низкой частоте точнее работает ADC ставь больше если успеваем со всем справиться P.S. В идеале конечно коэфицент для 2.56V равен 64/25575 что почти 400 но форум для новичков а профи сами знают, для начала так проще и понятнее
  4. Опубликовано Вчера, 23:19 Всем привет. Решил повторить пройденные уроки. И застрял на 7мом уроке. В уроке все понял. Повторил код. Но у меня в протэусе выдает значение при 1.5в и более не более чем 200, а в железе 255. У автора вышло 500. два дня пытаюсь понять что не так сделал. Не могу понять. Проект прилагается. Прикрепленные файлы: leson7.1.rar 52,26 Кб 2 раз скачано Скачал Ваш проект. После компиляции есть ошибка, в какой строке студия не показывает. Создал новый проект С (не С++) скопировал код lesson7.1.c , подключил n5110.c n5110.h и эврика все отл работает. Проверял на камне atmega 8 16PU, в протеусе не пробывал. Выдает примерно 500 при 1.3V при 3V выдает на табло 1023(ну это мах как я понял програмно). Нодо лишь малость шлифонуть железо о софт. Еще хотел сказать спасибо. Заработал lcd от nokia (модель не понял, LCD примерно как у 5110, телефон древний даже без сим,) правда показывает через строку как в формате NTSC. может пальнул что-то в нем (случайно подал около 7V) а может...
  5. Здраствуйте. Спасибо за курс, считаю для начинающего он очень даже "разжеван". Надеюсь что на сделанном не остановитесь и продолжите выпускать видео по сборке и программированию других устойств. Уставливую кокретный бит порта PORTB= 0b11000011; // или PORTB= 0b11001011; без разницы b=PORTB|0b00001000; PORTB=b; // PB3=1 без "передергивания" остальных Сброс бита порта PORTB= 0b11010011; // или PORTB= 0b11001010; без разницы b=~PORTB|0b0000001; PORTB=~b; // PB0=0 без "передергивания" остальных есть метод проще?
×
×
  • Create New...