Jump to content
Zheka

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

Recommended Posts

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

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

СКРОТ=0

CKSEL3…0=1110

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

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

и в пони

BSIZ,

BLB1 как пишется

Edited by Dmt

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
                     

Вебинар "Как создать BLE-устройство на базе новейшего беспроводного микроконтроллера STM32WB55"

27 ноября 2019 года компания КОМПЭЛ приглашает разработчиков, технических руководителей и энтузиастов беспроводной связи на вебинар, посвященный новинке 2019 года – мультипротокольному беспроводному микроконтроллеру STM32WB55, который позволяет создавать устройства на базе стандартов BLE 5.0; BLE Mesh; 802.15.4/ZigBee и Thread. На вебинаре мы покажем, как с помощью привычных инструментов STM32Cube и STM32CubeMX можно создать свое первое, надежно работающее BLE-приложение.

Зарегистрироваться на вебинар

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

Edited by Геннадий

Share this post


Link to post
Share on other sites

авр доктор скачал (атмега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

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

Edited by goodbye

Share this post


Link to post
Share on other sites

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

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

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

Edited by iwanich

Share this post


Link to post
Share on other sites
что сперва прошивают данные на Flash или Фьюзы выставляют и прошивают ???
Вообще надежнее сначала флеш, ее прошивкой навредить крайне сложно. Но если установка фузов не будет блокировать программирование кристалла (тактирование, SPIen, RSTdisable), как обычно и стараются делать, то не важно.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Edited by donec

Share this post


Link to post
Share on other sites

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

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

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

Edited by lukinov

Share this post


Link to post
Share on other sites

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

Edited by lukinov

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Сделал такой код на баскоме. (термометр на 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МГц.

Edited by Vit@lik

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By Cheshire Cat
      Здравствуйте, только начинаю изучать программирование мк. Я уже задавал этот вопрос в моих прошлых схемах мне отвечали что-то типа "любой стабилизрованый источник постоянного напряжения", или кидали схему такого источника. Можно назвать мне конкретное устройство? В общем то что я смогу забить в гугл и приписать купить. 

      Я уже больше двух месяцев жду пока мне придут с aliexpress детали для маленького лабараторного блока, но этот вариант может разбиться о кривизну моих рук.  Хочу просто купить такой источник и наконец заняться непосредственно МК. 
×
×
  • Create New...