Zheka

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

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

Dmt    2

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

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

СКРОТ=0

CKSEL3…0=1110

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

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

и в пони

BSIZ,

BLB1 как пишется

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

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


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

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

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


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

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

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


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

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

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

  • Одобряю 1

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


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

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

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


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

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

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

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


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

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

mg.png

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


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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

Не программатор определяет прямой/инверсный фьюз, а программа-прошивальщик. У 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    308

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

    • Автор: parovoZZ
      Поставил LUFA, следом абсолютно не нужный мне ASF. Но в упор не понимаю - как создать проект на базе этой библиотеки из студии? Приходится вручную копировать папку с заголовочниками LUFA, прописывать пути в makefile, лишние телодвижения по добавлению папки в свойства проекта. Если я это делаю всё вручную, то тогда для чего это расширение? Примеры я могу и так покрутить. ЗЫ - не слишком высокий скилл в юзании Atmel Studio/
    • Автор: Trisector
      Привет всем.
      Помогите с кодом, нужно озвучить нажатие кнопки, подключенной к порту PB0, то есть просто издать короткий "бип" одной частоты (примерно 1000 Гц) и длительностью примерно 0.2 секунды.
      Везде, где искал, сразу создают кучу нот, разные тона, используют прерывания, мне же надо только один короткий бип.
      Выполняться оно должно в теле цикла:
      while (1) 
          {
              while(PINB&0b00000001); // ждем нажатия на кнопку на порте PB0
      <вот здесь должен быть бип>
       
      п.с. забыл добавить - выполняться код будет на Attiny13a
    • Автор: Zver2011
      Всем привет! 
      Дано: Контроллер подсветки рабочей зоны кухни, реализованный на Tiny 13A.  Светодиодная лента длиной 2,3 метра, led 5050, 120 светодиодов/метр. Принципиальная схема устройства ниже:

      Код прошивки:
      #include <tiny13.h> #include <delay.h> int triggered = 0; int ontimer = 0; void main(void) { // Input/Output Ports initialization // Port B initialization // Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0); // State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0 PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 37,500 kHz // Mode: Fast PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Disconnected // Timer Period: 6,8267 ms // Output Pulse(s): // OC0A Period: 6,8267 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; while (1) { if (PINB.1==1) { triggered = 1; ontimer = 60; }; if (ontimer > 0) { ontimer--; } else { triggered = 0; }; if (triggered) { if (OCR0A<255) { OCR0A++; }; } else { if (OCR0A>0) { OCR0A--; }; }; delay_ms(10); } } Возникшая проблема:
      Греется полевой транзистор при работе. 
      Изначально поискав информацию на данную проблему, начал прикидывать. 
      Смотрим график зависимости пропускаемого тока стока (ID )от приложенного напряжения  затвор-сток (VGS),  при температуре окруж. среды 25 градусов: ID = 14 А (2,3 метра светодиодной ленты не могут столько кушать, по крайней мере я такую не видел).

      Было предположение что частота переключения ШИМ высокая - отсюда транзистор в не определенном состоянии = нагрев. Рассчитал макс. частоту так:
      Rg = 100 Ом, Vgs = 5V
      Заряд затвора:
      Qiss = Ciss * Vgs = 1800pF * 5v = 9nC
      Скрость нарастания:
      S = Rgate * Qiss = 100Ohm * 9nC = 0.009mV*sec
      Время на открытие или закрытие транзистора:
      t=S / Vgs = 0.002mV*sec * 3.2v = 4.5uSec
      Период  - это открытие + закрытие:
      T = t + t = 4.5uSec + 4.5uSec = 9uSec
      Максимальная частота переключения:
      F < 1 / T = 1 / 9uSec = 111KHz
      Ток через затвор (G) и цифровой выход Tiny 13A:
      I = Qiss / t = 2mA
      Максимальный выходной ток GPIO у Tiny 13A 40.0mA
      2mA < 40.0mA
      Выставил частоту ШИМ на 37,5 кHz. Вуаля - при подключении 1м светодиодной ленты (тестировал на обрезке), нагрева нет. Но как только подключил все 2,3 метра - транзистор стал снова спустя время греться, аж дотронуться не возможно.  Захотел померить ток, который потребляет 1 метр ленты, проверить продавца. Потребление 1 метра ленты оказалось вместо заявленных 600 мА, все 1,85 А, причем заметил странную вещь - ток начал возрастать спустя время на сотые доли  и дошел до 1,9 А. Дальше ждать не стал. Режим амперметра в мультиметре сломался?
      Далее подумал что слишком большая мощность рассеивается на транзисторе. Если учесть то, что при открытом транзисторе, его переход можно представить в виде линейного резистора с маленькой величиной сопротивления,  можно рассчитать рассеиваемую мощность на транзисторе:
      Смотрим сопротивление транзистора в открытом состоянии при VGS = 5В : RDS(on) = 0.18 Ом
      P1 = 1,9*1,9*0,18 = 0,65 Вт. (1 метр св.ленты).
      Раз мы взяли потребление 1 метра ленты  1, 9 А, тогда 2,3 метра потребляют  = 4,4 А. (Теперь не уверен в своем мультиметре).
      P2=4.4*4.4*0.18 = 3.5 Ватт - довольно таки многовато я думаю.
      В общем: Правильно ли я делаю расчеты? Что упустил?  Как снизить нагрев транзистора, без применения вентиляторов и здоровенных радиаторов? Есть вариант замены светодиодной ленты на что нибудь поменьше жрущее (60 светодиодов/ метр например), но в будущем еще много раз придется сталкиваться с полевиками, хотелось бы разобраться .
    • Автор: Денис Оробей
       Помогите написать простую задачку (для вас - простую, а я не шарю), на плате контроллера-конструнтора KIT-8515 нужно  сделать вот это: "Пусть движковыми переключателями задаются два четырехзначных операнда.  Напишите и протестируйте программу, при работе которой после нажатия кнопки 1 операнды складывались, а при нажатии кнопки 2 операнды вычитались, а результат операции выводился на светодиоды"
      Прикреплённый файл - начало задачки.
      Заранее благодарствую:)
      123.rar
    • Автор: Николай Зубий
      Как сделать  устройство, выводящие на индикатор время, прошедшее с момента последней перезагрузки контроллера?