Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
ATmega AVR Написание простой программы https://www.cyberforum.ru/ avr/ thread2840177.html
Добрый вечер, необходимо написать программу для Attiny13 на С. К мк подключены 2 тактовые кнопки и 3 светодиода. При нажатии на 1 кнопку последовательно загораются светодиоды, при нажатии в этот момент 2-ой кнопки они гаснут. Если после этого еще раз нажать 1 кнопку, то светодиоды будут гореть с той позиции, где произошла остановка. Был бы очень благодарен за помощь, только начинаю во все это...
Таймер в Atmega 328 не хочет считать до ICR1 (Toggle OC1A) ATmega AVR
Всем привет. Столкнулся с непониманием почему таймер не хочет работать в следующем режиме. Выставляю быстрый шим, далее выбираю изменение состояния пина при совпадении. А в WGM выбираю 14 режим, в котором таймер должен считать до значения записанного в регистр ICR1. Но ничего не происходит. Если же я ставлю режим 15 изменяя всего один бит, то все начинает работать, но тогда я пользуюсь регистром...
ATmega AVR Шум в линии питания от микроконтроллера ATmega328 https://www.cyberforum.ru/ avr/ thread2837849.html
Всем привет! Собираю схему, которая состоит из аналоговой и цифровой части и столкнулся с проблемой, что при подключении питания к микроконтроллеру, в схему идет сильный шум по линии питания. Так как аналоговая часть схемы должна быть чувствительна к слабым изменениям напряжения (пульсометр на фоторезисторе), то такие помехи для меня критичны. Пробовал ставить конденсатор параллельно питанию МК,...
ATmega AVR Загрузка прошивки через SPI и "Arduino as ISP" больше не доступна https://www.cyberforum.ru/ avr/ thread2837801.html
Здравствуйте. Прошивал Atmega328p через SPI и "Arduino as ISP", всё было хорошо до тех пор пока не прошил кодом в котором прошиваемый Atmega328p становился SPI мастером. С этих пор прошивамый МК успешно работает, но при повторной попытке прошить вышеуказанным методом в среде Arduino 1.8.13 появляется следующая ошибка: Sketch uses 10538 bytes (34%) of program storage space. Maximum is 30720...
Исследовать программную модель МК семейства (AVR) на примере реализации функции ATmega AVR
Приветствую всех, друзья! Помогите, пожалуйста, исследовать программную модель МК, семейства АVR на примере реализации функций y, где: x1, x2, const - двухбайтовые величины; способы адресации и местоположение переменных указаны в вариантах заданий То есть нужно написать на языке Assembler код, который будет выполняться в программном пакете Atmel Studio. Заранее благодарю!
ATmega AVR [Atmega16] Загорание светодиодов в зависимости от напряжения микроконтроллера Здравствуйте, помогите пожалуйста написать код. Задание: Создайте схематическую диаграмму и программу с комментариями на C++ для 8-битного микроконтроллера Atmel AVR ATmega16, который реализует следующий алгоритм: 1) MCU тактируется от встроенного генератора, тактовая частота равна 4 MHz. 2) Потенциометр 10 кОм подключается к входу АЦП (ADC3), работающего в 8-битном режиме, питающегося от... https://www.cyberforum.ru/ avr/ thread2828672.html
ATmega AVR алгоритм включения двух АЦП https://www.cyberforum.ru/ avr/ thread2828337.html
я так понял запустить АЦП на AVR нужно по следующему алгоритму. 1) включаем АЦП 2) устанавливаем делитель 2,4,8.... 3) устанавливаем опорное напряжение питания или ареф 4) выбор ацп 0.1.2.3 и т.п. 5) запустить преобразование. 6) читаем данные но как выбрать второй ацп? такой алгоритм почему-то не работает.
Atmel Studio консольный проект? ATmega AVR
В Visual studio можно создать проект "Консольное приложение", которое позволяет после ввода некоторых функций сразу же выводить результат в окне консоли. Можно то же самое сделать в Atmel Studio 7?
ATmega AVR Сложение чисел со знаком Atmega128 Необходимо реализовать следующее выражение: -260+1 в коде ассемблера для мк Atmega128 в программе MicroChip Studio 7. С ассемблером впервые познакомился сегодня, весь день ломал голову как это написать, результат получился следующий: .include "m128def.inc" ; подключение заголовочного файла Atmega128, в котором хранятся адреса и имена регистров .def tmp=R16 ; назначаем регистру символическое... https://www.cyberforum.ru/ avr/ thread2825892.html ATmega AVR Программа на микроконтроллере AtTiny 2313 Выводить на семисегментный индикатор текущую дату в формате ДД.ММ. а затем текущий год в формате ГГГГ. Время между сменами цифр на индикаторах -2 сек. https://www.cyberforum.ru/ avr/ thread2824612.html
i2c, atmel studio undeclared порты и регистры. TWBR TWSR ATmega AVR
Всем привет! Развод... депресняк... на 2 года забросил проект, программирование в целом, и произошло нечто странное за это время, атмел студия не хочет узнавать регистры i2c, поооо ним, а так же по дефайновым заменам типа #define ONE_WIRE_DDR DDRC для 1-wire выдает ошибки: "TWBR undeclared(first use in this function)" "ONE_WIRE_DDR undeclared(first use in this function)" в мэйне есть...
ATmega AVR МПСЗ на AVR https://www.cyberforum.ru/ avr/ thread2820469.html
Доброго времени суток, есть задача которую я сам себе и поставил, сделать микропроцессорное зажигания на ATMEGA8A
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
07.06.2021, 18:47  [ТС] 0

Компиляция программы генератора на ATMEGA8A - ATmega AVR - Ответ 15552109

07.06.2021, 18:47. Показов 7941. Ответов 100
Метки (Все метки)

Ответ

Проба с и таймером 0 (редко опрос кнопок вместо Int0, как использовать nSS для остановки генерации на инлайновом коде )) и 2 (перепрограммируется в режиме ШИМ) и битом 6 регистра SREG
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
 
 
 ...
 
void delay1s(void){ uint8_t i; for(i=0; i<100; i++){ _delay_ms(10); } }
 
//initialize Timer2 (used for button reading)
void Timer2_Init(void)
{
    TCNT2=0x00;
    sei();
} 
//start timer2
void Timer2_Start(void)
{
TCCR2|=(1<<CS22)|(1<<CS21)|(1<<CS20); //prescaller 256 ~122 interrupts/s    
TIMSK |=  (1<<TOIE2);//Enable Timer2 Overflow interrupts
// TIFR|=(1<<TOV2);//Enable Timer2 Overflow interrupts  
}
//stop timer 2
void Timer2_Stop(void)
{
TIMSK &= ~(1<< TOIE2); //Disable Timer2 Overflow interrupts
TCCR2&=~((1<<CS22)|(1<<CS21)|(1<<CS20)); //Stop timer0
//TIFR|=(1<<TOV2);//Disable Timer2 Overflow interrupts
 
}
 
 
 /*
uint32_t  div_5( uint32_t N   )
{
int32_t Q=0;
int32_t R=(int32_t ) N; 
while(R>=5){ Q++; R-=5; }
return  (uint32_t)Q;
}
*/
uint32_t  div_3125( uint32_t N   )
{
int32_t Q=0;
int32_t R=(int32_t ) N; 
while(R>=0x0C35){ Q++; R-=0x0C35; }
return  (uint32_t)Q;
}
 
 
void UpdateACC(void)
{
 //SG.acc=(uint32_t) ((  float)  SG.freq * (  float) 10.48576);
  // SG.acc=(uint32_t)   SG.freq /RESOLUTION;
    SG.acc=  (uint32_t) ( (uint32_t) ((uint32_t) (SG.freq <<15))   ) ; 
SG.acc=div_3125( SG.acc );
//uint8_t i1;
// for( i1=0; i1<5; i1++ ){    SG.acc=div_5( SG.acc  ) ;  }
 
 return;    
}
 
/*Initial menu show initial signal and frequency generator is off*/
void Menu_Update(uint8_t on)
{
    LCDclr();
    CopyStringtoLCD(  MENU[(SG.mode)], 0, 0 );
    LCDGotoXY(0, 1);
    if (SG.mode==6){ CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf("    %5uHz", (uint16_t)SG.deltafreq); }
    if (SG.mode==7){ CopyStringtoLCD(CLR, 0, 1 ); CopyStringtoLCD(RND, 0, 1 ); }
    if (SG.mode==8){ CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf(" %5uMHz", SG.HSfreq); }
    if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
        { CopyStringtoLCD(CLR, 0, 1 ); LCDGotoXY(0, 1); printf(" %5uHz", (uint16_t)SG.freq); }
    if (SG.mode!=6){ if(on==1) CopyStringtoLCD(MNON, 13, 1 );  else CopyStringtoLCD(MNOFF, 13, 1 ); }
}
 
/*update frequency value on LCD menu - more smooth display*/
void Freq_Update(void)
{
if (SG.mode==6){ LCDGotoXY(0, 1); printf("    %5uHz", (uint16_t)SG.deltafreq);}
if (SG.mode==8){ LCDGotoXY(0, 1); printf(" %5uMHz", SG.HSfreq); } //if HS signal
if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
  { LCDGotoXY(0, 1);printf(" %5uHz", (uint16_t)SG.freq);}
}
 
 
/*External interrupt0 service routine used to stop DDS depending on active menuany generator is stopped by setting flag value to 0
DDs generator which is inline ASM is stopped by setting */
/* CPHA bit in SPCR register */
 
 
 
 
 
 
 
ISR(INT0_vect)
{
 
SG.flag=0;   /* set flag to stop generator */
SPCR|=(1<<CPHA);/* using CPHA bit as stop mark */
 
//CopyStringtoLCD(MNOFF, 13, 1 );
SG.ON=0;/* set off in LCD menu */
SREG|=(_BV(6));
loop_until_bit_is_set(BPIN, START);//wait for button release
return;
}
 
//TIMSK =(1<<TOIE0);  // timer0 enable
//TCCR0 = (1<<CS02) | (1<<CS00); // prescaler 1/1024
  
void CheckButtonStop()
 
{
  if (bit_is_clear(BPIN, START))  { TIMSK &=~(1<<TOIE0);
  if (SG.flag==1){ SG.flag=0; SPCR|=(1<<CPHA);     SG.ON=0; SREG|=(_BV(6));  
   loop_until_bit_is_set(BPIN, START);   } 
 }
 
 
}
 
ISR(TIMER0_OVF_vect)
{
CheckButtonStop();
return;
}
 
 
 
/* timer overflow interrupt service tourine  checks all button status and if button is pressed
value is updated */
 
 
 
void CheckButtons(void)
{
/*Button UP increments value which selects previous signal mode if first mode is reached - jumps to last */
if (bit_is_clear(BPIN, UP)){ if (SG.mode==0){ SG.mode=MN_No-1;} else { SG.mode--; } 
                 Menu_Update(SG.ON); //Display menu item
    loop_until_bit_is_set(BPIN, UP); return; }
/*Button Down decrements value which selects next signal mode if last mode is reached - jumps to first*/
 
if ( bit_is_clear(BPIN, DOWN) ){
    if (SG.mode<(MN_No-1)) { SG.mode++; } else{ SG.mode=0; } //Display menu item
    Menu_Update(SG.ON);
    loop_until_bit_is_set(BPIN, DOWN); return;}
 
//frequency increment   
if (bit_is_clear(BPIN, RIGHT)){
    if(SG.mode==6){ if(SG.deltafreq==10000) { SG.deltafreq=1; } else {SG.deltafreq=(SG.deltafreq*10); }
            Freq_Update();
            loop_until_bit_is_set(BPIN, RIGHT); }
                    //ifhigh speed signal
     if (SG.mode==8){ if(SG.HSfreq==8) { SG.HSfreq=1; } else { SG.HSfreq=(SG.HSfreq<<1); }
            Freq_Update();
            loop_until_bit_is_set(BPIN, RIGHT); }
     if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)){
            if ((0xFFFF-SG.freq)>=SG.deltafreq) SG.freq+=SG.deltafreq;
            Freq_Update();
            //uint8_t ii=0;
            //press button and wait for long press (~0.5s)
                          // do{ _delay_ms(2); ii++; } while((bit_is_clear(BPIN, RIGHT))&&(ii<=250));//wait for button release
                          //  if(ii>=250){
                                                      //    do{ if ((0xFFFF-SG.freq)>=SG.deltafreq) { SG.freq+=SG.deltafreq; } Freq_Update();} 
                                                      //   while(bit_is_clear(BPIN, RIGHT));  }   //wait for button release
                
       }   return; }
 
//frequency decrement
if (bit_is_clear(BPIN, LEFT)){
    if(SG.mode==6){ if(SG.deltafreq==1) {SG.deltafreq=10000; } else {SG.deltafreq=(SG.deltafreq/10);}
            Freq_Update(); loop_until_bit_is_set(BPIN, LEFT); }
                  //ifhigh speed signal
    if (SG.mode==8){ if(SG.HSfreq==1) { SG.HSfreq=8;} else {SG.HSfreq=(SG.HSfreq>>1) ;} 
            Freq_Update(); loop_until_bit_is_set(BPIN, LEFT); }
     if ((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5)){
        if (SG.freq>=SG.deltafreq) SG.freq-=SG.deltafreq;
                Freq_Update();
            //  uint8_t ii=0;
                /* press button and wait for long press (~0.5s) */
            //  do{ _delay_ms(2); ii++; } while((bit_is_clear(BPIN, LEFT))&&(ii<=250));/* wait for button release */
            //  if(ii>=250){ do{ if (SG.freq>=SG.deltafreq) {SG.freq-=SG.deltafreq;} Freq_Update();
                                                                        //} while(bit_is_clear(BPIN, LEFT)); }/*wait for button release*/
                 
            } return ;}
 
 
if (bit_is_clear(BPIN, START)) {
     if(SG.mode!=6){
        /*saving last configuration*/
        SG.fr1=(uint8_t)(SG.freq);
        SG.fr2=(uint8_t)(SG.freq>>8);
        SG.fr3=(uint8_t)(SG.freq>>16);
     
        //Calculate frequency value from restored EEPROM values
        SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1)));
        //calculate accumulator value
     UpdateACC();
                   // #define RES  ((16000000/9/0x1000000)*0x10000)  
                  //SG.acc=((uint64_t)SG.freq << 16) / RES;
 
    //#define RES1 (F_CPU/NUM_CYCLES/2/0x100)
    
    //SG.acc=((uint64_t)SG.freq << 16) / RES1;
                   //SG.acc=  SG.freq/ RESOLUTION   ; //warning
     //  SG.acc=  (uint32_t)( SG.freq/ RESOLUTION)    ; //warning
                                   //   SG.acc= (uint32_t)SG.freq* 10.48576;  
 
         SG.flag=1; //set flag to start generator
         SG.ON=1; //set ON on LCD menu
         SPCR&=~(1<<CPHA); //clear CPHA bit in SPCR register to allow DDS
         SREG&=~(_BV(6));  
        //Stop timer2 - menu inactive
         Timer2_Stop();
         
        //display ON on LCD
         Menu_Update(SG.ON);
            
             }
    loop_until_bit_is_set(BPIN, START);  //wait for button release
    TIMSK|=(1<<TOIE0);
 
    return;
    }
 
 
 
}
 
 
 
 
ISR(TIMER2_OVF_vect)
{
CheckButtons();
return;
}
 
 
/*DDS signal generation function
Original idea is taken from
http://www.myplace.nu/avr/minidds/index.htm
small modification is made - added additional command which
checks if CPHA bit is set in SPCR register if yes - exit function  //SREG,6(T)
*/
 
 
 
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{ 
asm volatile(   "eor r18, r18   ;r18<-0"    "\n\t"
                "eor r19, r19   ;r19<-0"    "\n\t"
                "1:"                        "\n\t"
                "add r18, %0    ;1 cycle"           "\n\t"
                "adc r19, %1    ;1 cycle"           "\n\t"  
                "adc %A3, %2    ;1 cycle"           "\n\t"
                "lpm            ;3 cycles"  "\n\t"
                "out %4, __tmp_reg__    ;1 cycle"   "\n\t"
                "sbis %5, 2     ;1 cycle if no skip skip if  SPCR.CPHA" "\n\t"    
                "rjmp 1b        ;2 cycles. Total 10 cycles" "\n\t"
                :
                :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTD)), "I" (_SFR_IO_ADDR(SPCR))
                :"r18", "r19" 
    ); 
}
 
 
 
/*
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{ 
asm volatile(   "eor r18, r18   ;r18<-0"    "\n\t"
                "eor r19, r19   ;r19<-0"    "\n\t"
                "1:"                        "\n\t"
                "add r18, %0    ;1 cycle"           "\n\t"
                "adc r19, %1    ;1 cycle"           "\n\t"  
                "adc %A3, %2    ;1 cycle"           "\n\t"
                "lpm            ;3 cycles"  "\n\t"
                "out %4, __tmp_reg__    ;1 cycle"   "\n\t"
                "sbis %5, 6     ;1 cycle if no skip skip if  SPCR.CPHA" "\n\t"    
                "rjmp 1b        ;2 cycles. Total 10 cycles" "\n\t"
                :
                :"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTD)), "I" (_SFR_IO_ADDR(SREG))
                :"r18", "r19" 
    ); 
}
 
 
 
*/
 
void Timer1_Start(uint8_t FMHz)
{
    if(FMHz==1){ OCR1A=7; } else  //start high speed (1MHz) signal
    if(FMHz==2){ OCR1A=3; } else //2MHz
    if(FMHz==4){ OCR1A=1; } else //4MHz     
    if(FMHz==8){ OCR1A=0; } else //8MHz 
        OCR1A=7;//default 1MHz
    
    //Output compare toggles OC1A pin
    TCCR1A=0x40;
    //start timer without prescaler
    TCCR1B=0b00001001;
}
void Timer1_Stop(void){ TCCR1B=0x00; }//timer off
 
 
 
void Main_Init(void)
{
//stderr = &lcd_str;
stdout = &lcd_str;
//--------init LCD----------
LCDinit();
LCDclr();
LCDcursorOFF();
 
CopyStringtoLCD(welcomeln1, 3, 0);
CopyStringtoLCD(welcomeln1, 3, 1);
 _delay_ms(50);
 
 
 
 
 
 
SG.mode=0x00; //eeprom_read_byte((uint8_t*)EEMODE);
SG.fr1=0xE8;//eeprom_read_byte((uint8_t*)EEFREQ1);
SG.fr2=0x03;//eeprom_read_byte((uint8_t*)EEFREQ2);
SG.fr3=0x00;//eeprom_read_byte((uint8_t*)EEFREQ3);
SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1)));
 
UpdateACC();
               //SG.acc= (uint32_t) ( SG.freq* 10.48576); 
               //SG.acc= (uint32_t) SG.freq/RESOLUTION    ; //warning  RESOLUTION= 0.095367431640625 
               //SG.acc=   SG.freq/RESOLUTION    ; //fix ***********************
SG.flag=0;
//default 1MHz HS signal freq
SG.HSfreq=1;
SG.deltafreq=100;
//------------init DDS output-----------
R2RPORT=0x00;//set initial zero values
R2RDDR=0xFF;//set A port as output
//-------------set ports pins for buttons----------
BDDR&=~(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT));
BPORT|=(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT));
//---------set ports pins for HS output---------
HSDDR|=_BV(HS);//configure as output
//-----------Menu init--------------
SG.ON=0;//default signal is off
 
//return;
Menu_Update(SG.ON);
//-----------Timer Init-------------
Timer2_Init();
//Start Timer with overflow interrupts
Timer2_Start();
}
 
 
 
 
 
 
//const uint8_t welcomeln1[] PROGMEM ="AVR LCD DEMO\0";
int main(void)
{
//Initialize
Main_Init();
     
//GICR |= (1<<INT0);  
 
TCCR0 = (1<<CS02) | (1<<CS00);
TIMSK&=~(1<<TOIE0);
while(1)  {
 
 
 
 
    if (SG.flag==1)
        {  //fix 
 
 
        //GICR|=(1<<INT0);//set external interrupt to enable stop
        if (SG.mode==7)
            {
            //Noise
            do { R2RPORT=rand();} while(SG.flag==1);
            //set signal level to 0
            R2RPORT=0x00;
            //display generator OFF
            Menu_Update(SG.ON);
            //stop external interrupt
            GICR&=~(1<<INT0);
            TIMSK&=~(1<<TOIE0);     
 
            //start timer menu active
            Timer2_Start();
            }
        else if (SG.mode==6)
            {
            //freq step
            while((SG.flag==1))
            {
            //not implemented
            CopyStringtoLCD(NA, 0, 1 );
            }
            //set signal level to 0
            R2RPORT=0x00;
            //display generator OFF
            Menu_Update(SG.ON); 
            GICR&=~(1<<INT0);//|(1<<INT1);//stop external interrupt
            TIMSK&=~(1<<TOIE0);
            //start timer menu active
            Timer2_Start();
            }
 
        else if (SG.mode==8)
            {
            //High speed signal
            Timer1_Start(SG.HSfreq);
            while((SG.flag==1)) { CopyStringtoLCD(MNON, 13, 1 ); }//not implemented
            Timer1_Stop();//timer off
            //set HS pin to LOW
            HSPORT&=~(1<<HS);
            //display generator OFF
            Menu_Update(SG.ON); 
            GICR&=~(1<<INT0);//|(1<<INT1);//stop external interrupt
             TIMSK&=~(1<<TOIE0);
            //start timer menu active
            Timer2_Start();
            }
        else
            {
            //start DDS
            SREG|=(_BV(6));
            Signal_OUT(  SIGNALS[SG.mode], (uint8_t) ((uint32_t) SG.acc>>16), (uint8_t)((uint32_t) SG.acc>>8),(uint8_t)SG.acc);
            //set signal level to 0
            R2RPORT=0x00;
            //display generator OFF
            Menu_Update(SG.ON);
            GICR&=~(1<<INT0);//|(1<<INT1);
            TIMSK&=~(1<<TOIE0);
                                                      //stop external interrupt
            //start timer menu active
            Timer2_Start();
            }
        }
 
 
//CheckButtons();
 
    }
return 0;    
}


Вернуться к обсуждению:
Компиляция программы генератора на ATMEGA8A ATmega AVR
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2021, 18:47
Готовые ответы и решения:

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

Не могу понять почему выскакивает ошибка при компиляции программы для МК atmega8a
Уважаемые господа программисты. Помогите мне пожалуйста . С паяльником я дружу с 12 лет и восновном...

Разработка программы Генератора Псевдослучайной Последовательности
Всем привет! Есть задача: написать программу Генератора Псевдослучайной Последовательности (ГПСП)...

Генератор карты высот (часть программы-генератора G кода)
Наверное прийдётся сделать длинное вступление (все-же пишут чего и зачем, у кого сессия, у кого...

Компиляция программы на С#
Здравствуйте. Подскажите пожалуйста есть ли возможность скомпилировать программу написанную на С#...

100
07.06.2021, 18:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2021, 18:47
Помогаю со студенческими работами здесь

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

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

Компиляция программы
Читаю книжку Олега Калашникова. В принципе автор все хорошо объясняет, за исключением того, как...

компиляция программы
Помогите пожалуйста скомпилировать программу и исправить если что не так

Компиляция программы
Привет форумчане! Вот задание: Написать программу, которая вводит с клавиатуры одномерный массив из...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru