Zheka

Начинающим О Фьюзах (Fuse Bits)

325 сообщений в этой теме

Dmt    2

Спасибо за громкое молчание, тогда хоть скажите для Avreal как правильно, чтобы получить встроенный генератор 1 МГц

СКРОТ=1 CKSEL3…0=0001 или инвертировать

СКРОТ=0

CKSEL3…0=1110

и в заводских настройках

SUT=? что стаит по умолчанию

и в пони

BSIZ,

BLB1 как пишется

Изменено пользователем Dmt
  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    628

Самый простой способ выяснить - считать с живого камня. СЧИТАТЬ. и по фьюзу RSTDSBL можно говорить надо их инвертировать или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Dmt    2

Я уже понял что как-то самому разбираться надо. Но всё же не хочу рисковать, поэтому заказал контролер ардуина, для дальнейшего творчества он тоже на атмеле. Заодно и узнаю как правильно фюзы выстовить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    628

Так там будет тот же риск, и фьюзы там не меняются штатно. Считать их вполне безопасно.

Но, собственно в чем проблема заглянуть в даташит и справку твоего программатора чтобы выяснить что именно нужно ставить?

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
pryanic    576

Есть вопрос по поводу фьюза RSTDISB. Вывод ресет в случае его программирования работает как порт ввода/вывода. А не будет ли проблем с ISP программированием при таком режиме?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Будут. Для SPI программирования это дорога в один конец. Потом только параллельный программатор.

Изменено пользователем Геннадий
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Загрузка...
alex_kwinto    0

Приветствую. Помогите новичку рассчитать фьюзы. Никак докурить не могу.

mg.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
goodbye    19

авр доктор скачал (атмега8 на атмегу8 всеми ногами)

хочу развести и вытравить платку.

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

я только начал читать про авр асм.. поэтому пока не уверен что всё правильно понимаю.

я понял что нужны сигналы:

PD1, PD2, PD3, PD4, PD5, PD6, PD7

GND, VCC

PB0, PB3, PB4, PB5, PB6, PC0, PC1, PC2

на reset мертвой атмега8 подается +12в

остальные сигналы, которые выше перечислил соединяются 1 к 1 на обоих атмегах.

не упустил ли я ещё ног, или лишних не приписал ? подскажите.

не хочется по стораз платы перетравливать.

вот исходник прошивки "avr doc+or"

; ******************************************************

;

; RDY/BYSY PD1

; OE PD2

; WR PD3

; BS1 PD4

; XA0 PD5

; XA1 PD6

; PAGEL PD7

; +12V RESET

; BS2 PC2

; XTAL1

; GND

; ******************************************************

.include "m8def.inc"

.def zero = r1

.def tmp = r16

.def tmp2 = r17

.def data= r21

.def _WR_= r22

.equ bysy = pd1

.equ OE = pd2

.equ wr = pd3

.equ bs1= pd4

.equ xa0 = pd5

.equ xa1 = pd6

.equ PAGEL= pd7

.equ bs2 = pc2

.equ xtal1= pb6

.equ pitanie_podanno = pc5

.org 0

rjmp RESET ; Reset Handler

rjmp RESET ; EXT_INT0 ; IRQ0 Handler

rjmp RESET ; EXT_INT1 ; IRQ1 Handler

rjmp RESET ; TIM2_COMP ; Timer2 Compare Handler

rjmp RESET ; TIM2_OVF ; Timer2 Overflow Handler

rjmp RESET ; TIM1_CAPT ; Timer1 Capture Handler

rjmp RESET ; TIM1_COMPA ; Timer1 CompareA Handler

rjmp RESET ; TIM1_COMPB ; Timer1 CompareB Handler

rjmp RESET ; TIM1_OVF ; Timer1 Overflow Handler

rjmp RESET ; TIM0_OVF ; Timer0 Overflow Handler

rjmp RESET ; SPI_STC ; SPI Transfer Complete Handler

rjmp RESET ; USART_RXC ; USART RX Complete Handler

rjmp RESET ; USART_UDRE ; UDR Empty Handler

rjmp RESET ; USART_TXC ; USART TX Complete Handler

rjmp RESET ; ADC ; ADC Conversion Complete Handler

rjmp RESET ; EE_RDY ; EEPROM Ready Handler

rjmp RESET ; ANA_COMP ; Analog Comparator Handler

rjmp RESET ; TWSI ; Two-wire Serial Interface

;****************************

RESET:

nop;

ldi tmp, low(ramend)

ldi tmp2, High(ramend)

out SPH, tmp2 ; настроили стек

out SPL, tmp ; настроили стек

ldi tmp, 0xff

out ddrb, tmp ; порт данных на выход

ldi tmp, (1<<xa0)|(1<<xa1)|(1<<bs1)|(1<<wr)|(1<<PAGEL) ;

out ddrd, tmp

ldi tmp, (1<<bs2)|(1<<pc1)|(pc0)

out ddrc, tmp

ldi _WR_, 1<<wr

clr zero

cbi ddrc, pitanie_podanno

;----------------------------------------------

main:

;sbis pinc, pitanie_podanno

;rjmp main

;начало программирования

rcall delay

sbi portd, wr

;1a

;1. Set XA1, XA0 to “10”. This enables command loading.

;2. Set BS1 to ”0”.

;3. Set DATA to “XXXX XXXX”. This is the command for XXX.

;4. Give XTAL1 a positive pulse. This loads the command.

sbi portd, xa1

cbi portd, xa0

cbi portd, bs1

// 0b01000000 ;команда Write Fuse Bits

out portb, zero

cbi portc, pc1

sbi portc, pc0

rcall xtal_pulse

;2c

;C. Load Data Low byte

;1. Set XA1, XA0 to “01”. This enables data loading.

;2. Set DATA = Data Low byte (0x00 - 0xFF).

;3. Give XTAL1 a positive pulse. This loads the data byte.

cbi portd, xa1

sbi portd, xa0

; 0b11100001 ;BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0

out portb, zero

sbi portb, pb0

sbi portb, pb5

sbi portc, pc0

sbi portc, pc1

rcall xtal_pulse

;3

;(Low byte - Set BS1 and BS2 to “0”)

;(High byte - Set BS1 to “1” and BS2 to “0”. This selects high data byte.)

cbi portd, bs1

cbi portc, bs2

;4. Give WR a negative pulse and wait for RDY/BSY to go high.

cbi portd, wr

rcall delay;

out portd, _WR_ ;все выводы =0 wr=1

_bysy_: sbis pind, bysy

rjmp _bysy_

;1a

sbi portd, xa1

cbi portd, xa0

cbi portd, bs1

; 0b01000000 ;команда Write Fuse Bits

out portb, zero

cbi portc, pc1

sbi portc, pc0

rcall xtal_pulse

;2c

cbi portd, xa1

sbi portd, xa0

;data, 0b11011001 ;(RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST)

out portb, zero

sbi portb, pb0

sbi portb, pb3

sbi portb, pb4

sbi portc, pc0

sbi portc, pc1

rcall xtal_pulse

;3

;(High byte - Set BS1 to “1” and BS2 to “0”. This selects high data byte.)

sbi portd, bs1

cbi portc, bs2

;4. Give WR a negative pulse and wait for RDY/BSY to go high.

cbi portd, wr

sbi ddrc, pc4

sbi portc, pc4

end: rjmp end;

rjmp main

;****************************

delay:

ldi tmp, 70

loop1:

dec tmp

brne loop1

ret

;****************************

xtal_pulse:

rcall delay

sbi portb, xtal1

rcall delay

cbi portb, xtal1

out portd, _WR_ ;все выводы =0 wr=1

rcall delay

ret

;****************************

Изменено пользователем goodbye

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
__alexander    10

как бы на прямую не получиться. данные для DATA по ДШ PC[1:0]:PB[5:0]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
iwanich    238

Помогите выставить фьюзы вот по этой картинки в Программе Bascom 2.0.5.0 c usbasp програматором.. И что сперва прошивают данные на Flash или Фьюзы выставляют и прошивают ???

внутреннего генератора 4MHz, скрин от программы PonyProg.

post-14927-0-31404200-1397666295_thumb.jpg

Изменено пользователем iwanich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
COKPOWEHEU    257
что сперва прошивают данные на Flash или Фьюзы выставляют и прошивают ???
Вообще надежнее сначала флеш, ее прошивкой навредить крайне сложно. Но если установка фузов не будет блокировать программирование кристалла (тактирование, SPIen, RSTdisable), как обычно и стараются делать, то не важно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lukinov    55

Нужно запрограммировать фьюзы для ATtony2313 в журнале дан рисунок с фьюзами посмотрите правильно я их выставил с CVAVR. МК один у меня есть боюсь его запороть фьюзами.

post-29150-0-31441700-1397837286_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BODLEVEL и CKSEL проверьте еще раз. SPMEN случайно не попутан с SPIEN?

Изменено пользователем Геннадий

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lukinov    55

Вот и прошу помочь , как правильно нужно сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
donec    133

Для AVR фьюз считается запрограммирован если установлен в "0". У тебя должны быть запрограммированны фьюзы EESAVE, SPIEN, CKSEL1, SUT0, BODLEVEL0 и BODLEVEL1. Фьюзы SPIEN и SPMEN это разные фьюзы - не перепутай их. Как правило последовательные программаторы не могут менять SPIEN поэтому не во всех программаторах он отображается, иначе можно отключить возможность программирования этим программатором. Теперь разберись со своим программатором, дело в том, что в разных программах установленная "птичка" по разному рассматривается, в одном программаторе установленная "птичка" это - запрограммировать фьюз (т.е. установить в "0"), а в другом наоборот - установить его в "1", т.е. не программировать. Например в PonyProg установленная "птичка" - это программировать фьюз, как в CVAVR не знаю, нету у меня такой проги.

Изменено пользователем donec

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lukinov    55

donec спасибо. Я обычно ориентируюсь по Rstdisbl. Вот меня эти SPIEN и SPMEN и в водили в ступор. Потому что в фьюзах SPIEN нет, наверно просто оставить его.

Рисунок в PonyProg правильно теперь поставил.

post-29150-0-89978700-1397899132_thumb.jpg

Изменено пользователем lukinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lukinov    55

Ещё раз спасибо. Сейчас запрограммирую и буду паять и пробовать

Изменено пользователем lukinov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
iwanich    238

Перерыл весь инет...уже каша в голове.. не могу понять какие fuse в Bascom прямые или инверсные ??

выставить не могу по этой картинке из Рони.. уже три атмеди в мир иной ушли..

post-14927-0-97066200-1397921136_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не программатор определяет прямой/инверсный фьюз, а программа-прошивальщик. У CodeVision галочка означает запрограммированный фьюз (т.е. =0). Объясните режим работы МК, тогда легче подсказать с конфигурацией фьюзов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Помогите, оценить своих опытным взглядом

avr-gcc -c -mmcu=atmega8  -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -DF_CPU=7372800 -Wa,-adhlns=%1.lst  -std=gnu99 %1.c -o %1.o

avr-gcc -mmcu=atmega8   -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -DF_CPU=7372800 -Wa,-adhlns=%1.o  -std=gnu99 %1.o   --output %1.elf -Wl,-Map=%1.map,--cref -lm

avr-objcopy -O ihex -R .eeprom %1.elf %1.hex

avrdude -p m8 -P COM3 -c usbasp -b 19200 -U flash:w:%1.hex

сейчас так проходит процесс компиляции и заливки

нужно ли -DF_CPU=7372800 чтобы выставлять частоту,или достаточно в самом коде

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

-U lfuse:w:0xe4:m -U hfuse:w:0xd9:m

общая строка так должна быть?

avrdude -p m8 -P COM3 -c usbasp -b 19200 -U flash:w:file.hex -U lfuse:w:0xe4:m -U hfuse:w:0xd9:m

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vit@lik    3

какая заводская частота atmega32???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Viktor26    306

1МГц от внутреннего генератора как и все остальные

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vit@lik    3

Сделал такой код на баскоме. (термометр на ds18b20)

$regfile = "m32def.dat"

$crystal = 8000000

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portd.0 , Rs = Portd.1

Config 1wire = Portd.2

Dim A As Byte

Dim B As Byte

Dim C As Byte

Dim D As Byte

Dim E As Byte

Config Lcd = 20 * 4

Initlcd

Cls

Cursor Off

'Виведення температури'

Do

1wreset

If Err = 1 Then

Cls

Lcd "Err"

Do

Loop

Else

1wwrite &HCC

1wwrite &H44

Waitms 750

1wreset

1wwrite &HCC

1wwrite &HBE

A = 1wread()

B = 1wread()

If A > 248 Then

A = &HFF - A

B = &HFF - B

E = 2

Else

E = 1

End If

C = A / 16

D = B * 16

C = C + D

If E = 2 Then C = C + 1

If E = 1 And C = 0 Then E = 0

Cls

Lcd "Temp= "

If E = 0 Then Lcd " " ; C ; "'" ; "C"

If E = 1 Then Lcd "+" ; C ; "'" ; "C"

If E = 2 Then Lcd "-" ; C ; "'" ; "C"

End If

Loop

End

Фюзов не трогал.

Почему оно работает??

Когда писало крисатл=1мгц то не работало.

А так когда пишет кристал=8мгц то работает. Если у него частота 1МГц.

Изменено пользователем Vit@lik

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Faust_VIII
      Есть вот такой фрагмент кода отвечающий за ШИМ в программе управления BLDC. 

      {
      TCCR0A |= (1 << COM0A1)|(0 << COM0A0)| // Сброс вывода OC0A при совпадении
      (1 << COM0B1)|(0 << COM0B0)| // Сброс вывода OC0B при совпадении
      (1 << WGM01)|(1 << WGM00); // Режим Fast PWM
      TCCR0B |= (1 << CS00); // Предделитель CLK/1

      TCCR2A |= (1 << COM2B1)|(0 << COM2B0)| // Сброс вывода OC2B при совпадении
      (1 << WGM01)|(1 << WGM00); // Режим Fast PWM
      TCCR2B |= (1 << CS00); // // Предделитель CLK/1


      PCMSK0 |= (1 << PCINT2)|(1 << PCINT1)|(1 << PCINT0); // Активируем входы внешних прерываний
      PCICR |= (1 << PCIE0); // Разрешаем прерывание по изменению состояния порта B

      ADMUX |= (1 << MUX1)|(1 << MUX0); // Вход ADC3 
      ADCSRA |= (1 << ADEN) | (1 << ADPS1); // Разрешаем АЦП, предделитель на 4

      DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // Порт С - выход(светодиоды) 
      PORTC &= ~(1 << PC2)|(1 << PC1)|(1 << PC0);

      DDRB |= (1 << PB2)|(1 << PB1)|(1 << PB0); // Кратковреммено подаем лог.1 на входы датчиков 
      PORTB |= (1 << PB2)|(1 << PB1)|(1 << PB0); // для первоначального запуска двигателя
      PORTB &= ~(1 << PB2)|(1 << PB1)|(1 << PB0);

      DDRB = 0x00; // Порт B - вход

      sei(); // Глобально разрешаем прерывания

      DDRD = 0xFF; // Порт D - выход 

      программа работает но двигатель пищит что очень напрягает нервы, я так понимаю что писк происходит из-за низкой частоты ШИМ. Проект собран на AVR Atmega48 с кварцем на 16МГц. Как поднять частоту ШИМ (в программировании я не силен но стараюсь разобраться, данный отрывок программы брался из интернета и как он работает я понимаю хреновато)
    • Автор: Oleg031
      Прошу Вашей помощи уважаемые форумчане!
      Автором В. Нефёдовым, г. Брянск была предложена интересная схема "Универсального микроконтроллерного зарядного устройства", http://www.radioradar.net/radiofan/power_supply/microcontroller_universal_charger.html#comment,
      которая была мной повторена. Схема рабочая, но по причине моей неграмотности в программировании - работает у меня не корректно! А именно не могу правильно записать при программировании через eXtreme Burner в EEPROM приведенные им коды: по адресу 00H - 2СН, по адресу 01H - 03H, по адресу 02H - 0BEH, по адресу 03H -64H. Не понимаю что, как и куда писать. Не судите строго!
      Прошу либо скиньте фотку как это должно выглядеть в программе, либо файл .eep
    • Автор: oner
      Всем привет!

      Я пишу код в Atmel studio для вывода текста на дисплей. В определенном случае мне нужно, чтобы при отображении на дисплее определенного текста, который задается функцией 
      GLCD_String(1,"123") и нажатия клавиши, например
      PB2=0 Запускалась другая функция. Однако, на 
      while(1)     { if ((GLCD_String()=GLCD_String(1,"123"))|PB2=0)         {             ABC();         }     } компилятор ругается "Error too few arguments to function 'GLCD_String'". Однако, сама по себе функция GLCD_String() работает, если брать без if.

      Как устранить эту ошибку?
       
    • Автор: DrobyshevAlex
      Здравствуйте! Хочу сделать программную регулировку контрастности для дисплей 1602.
      МК у меня atmega8. В эмуляторе не видно результата по этому думаю как плату разводить.
      Я перечитал много тем но толком не нашел ответ. Мне нужно от 5 вольт с помощью ШИМ регулировать напряжение на дисплее от 0 до 5В.
      Для сглаживая я хотел использовать RC фильтр, но видимо в простом варианте это не подойдет судя по ответам на других форумах.
      Встречал предложения сделать подряд несколько фильтров, использовать транзистор, добавить ОУ, использовать инвертор напряжения на двух диодах и двух конденсаторах.
      У меня есть парочка LM358. Решил остановится на этом варианте.
      Если я выход фильтра подключу на положительный вход ОУ а отрицательный соединю с выходом ОУ - я избавлюсь от неизвестности сопротивления нагрузки.
      МК работает на частоте 8MHz ШИМ 31250Hz. Нашел формулу расчета цепочки. R = 1/(2 * 3.14 * 31250Hz * 1nF) = 5k.
      Кто нибудь делал такую регулировку? Этого достаточно? Или можно выкинуть ОУ? Или лучше сделать два фильтра подряд? Тогда как расчитывать номиналы?
       
    • Автор: Arseniy Popov
      Добрый день! Необходимо подобрать микроконтроллер, который будет получать команды по serial от esp8266 и димировать RGBW светодиод по следующему алгоритму: 
      https://docs.google.com/document/d/1FkPLiIgxleuDQn8pjihICQGRrMPXbwFzqCt6StQZjhU/edit?usp=sharing
      а также написать для него прошивку на си.
      Отвечать можете в телеграм arsenicum32 или сюда.
      Пишите цену / сроки, находитесь ли в МСК и/или в области.