7 bits?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

7 bits?

Mensagempor _blackmore_ » 27 Dez 2009 22:54

É possível utilizar direto o conversor AD de um pic para resolução em apenas 7 bits? (valor final de 127)
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Re: 7 bits?

Mensagempor andre_luis » 28 Dez 2009 07:23

_blackmore_ escreveu:É possível utilizar direto o conversor AD de um pic para resolução em apenas 7 bits? (valor final de 127)


Não pode limitar o fundo-de-escala pelo divisor resistivo ?
( Acredito que um shift right não pode, deduzindo pela sua pergunta )

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor MOR_AL » 28 Dez 2009 08:25

Talvez fosse melhor usar seis instruções em assembler.
Se eu entendi o que você quer, basta fazer:
Ops! :!: Editando: O Registro ADRESL está no banco 1

BSF STATUS, RP0
MOVLW B'11111110'
ANDWF ADRESL, F
BCF STATUS, C
RRF ADRESL, F
BCF STATUS, RP0
; ADRESL = B'0xxxxxxx' Apenas 7 bits significativos.

O "x" é o valor da conversão.

Ou ainda:
BSF STATUS, RP0
BCF STATUS, C
RRF ADRESL, F ; O bit STATUS, C teria sujeira. Ou '1', ou '0'.
BCF STATUS, RP0

MOR_AL
Editado pela última vez por MOR_AL em 28 Dez 2009 20:19, em um total de 2 vezes.
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor ze » 28 Dez 2009 17:29

por hw interno do chip não dá. Por sw, some-se o óbvio ululante ADRESL>>=1 às dicas acima. Além da perda de resolução, isso seria também de tempo (em todos os sentidos) visto que as operações são feitas em 8 bits. (. de vista de onde estou)
abç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Jorge_Francisco » 28 Dez 2009 17:33

Coloque o AD em 8 bits e rotacione conforme disseram. Perde-se 20mV de resolução.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor MOR_AL » 28 Dez 2009 20:18

Editei minha mensagem anterior.

O registro ADRESL está no banco 1!

MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor _blackmore_ » 28 Dez 2009 22:45

andre_teprom

pensei em utilizar o shift right ... mas se o AD trabalhasse direto com o valor seria mais prático nao?

MOR_AL

opa !! valeu mestre !! vou considerar esta opção!

lellis

perda de resolução não é problema (espero) ... já o tempo ... estou considerando utilizar um cristal maior caso a o link entre aparelhos depois não funcione ...

Jorge_Francisco

opa !! como falei .. havia pensado nesta possibilidade ... vou considerar sua sugestão!

a todos os amigos, obrigado pelos comentários !!

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor jorgeluiz » 29 Dez 2009 02:15

porque nao 9 bits? 5,12 Volts = 512 posiçoes. 0,1 de resoluçao.
Avatar do usuário
jorgeluiz
Byte
 
Mensagens: 448
Registrado em: 26 Mar 2007 02:26

Mensagempor _blackmore_ » 29 Dez 2009 03:06

é que estou fazendo um pequeno "controlador" para instrumento musical e o padrão MIDI utiliza apenas 7 bits (0 a 127) ...
tento fazer algo para apresentar na jornada científica da faculdade no proximo semestre ... provavelmente em março 2010 ...
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor fabim » 29 Dez 2009 07:16

á tá!!
rsrsrs
té que enfim,
velho se for usar potenciometro pra pegar a porrada das piezo, pode ser de 8 bit´s mesmo, só dar uma girada para direita uma vez...
O nivel vai ser proporcional a fundo de escala, o qual tu vai calibrar na hora que colocar o potenciometro...
Só não esquece de colocar o schotcky pra não passar V-..

Abraços
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor _blackmore_ » 29 Dez 2009 10:24

fabim

não to fazendo percussão não ... to fazendo um controlador para a mesa virtual q existe nos softwares ... sacou?
mas de qqer forma valeo a sua tentativa
o papo está aqui na bancada até que funcionando ... agora o problema eh a danada da bendita velocidade de 31250Hz ... ô negócio chatin ... hehe
já fez esse tipo de conexão?

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor fabim » 29 Dez 2009 10:41

sim ja sim,
a uns 3 anos, eu fiz uma bateria, e um midi set.
usava no virtual DJ,
Depois que eu consegui fazer quase tudo, perdeu a graça, joguei no canto e não mexi mais...
só uma dica, quanto maior a velocidade do cristal, melhor precisão nos 31250bauds vai conseguir.
Eu fiz no 18f4550 em 48mhz.

devo ter alguma coisa no meio dos 145GB do D:///

hehe, ne complicado não viu, é facim!!
Tem uma porrada de informação na net, muito mesmo!!!

Depois eu tentei implementar o hid no usb, com alguns MID-in-out, só que engolia muito caroço no processo, e o pic com 12 mips não deu conta de tratar tudo, aí desisti.

Procura no grogui, PIC USB MID INTERFACE.

A umas 3 semanas, eu consegui achar um com o LPC2368 com 16 canais MID -IN - OUT, só que a dona preguiça ainda não deixou eu brincar com ele.

Abraços
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor _blackmore_ » 29 Dez 2009 10:47

eu fiz toda a rotina de enviar os dados no proteus funfa ... até que to entendendo as tabelas, control change ...
mas o problema ... nao to conseguindo linkar os 31250bauds com o resto ... tah osso! sohfalta isso ...
por ter jah uma placa pronta e nao ter onde comprar outro cristal, estou com um de 4 Megas por enquanto ... mas a idéia era mesmo a de usar um cristal maior ...
quanto a usb .. por enquanto nao dah ... to sem microcontrolador aqui ...
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Vonnilmam » 29 Dez 2009 19:30

Olha só eu já fiz isso (em assembler, ok), bom eu faço a leitura normalmente com resolução de 8 bits e direciono o resultado do AD afim de indexar uma tabela contendo os 7 bits que eu preciso (no meu caso eu precisei ler um potenciometro com resolução de 8 bits no AD, e indexei diretamente um e2prom, onde se encontrava uma tabela que ia do endereço 00 até 255 totalizando 8 bits, nesta caso eu repeti os dados de dois em dois endereços ex.: 00h=(dado 00), 01h=(dado 00), 02h=(dado 01), 03h=(dado 01) e assim sussesivamente até o final da tabela)...será que eu consegui ser claro?;;;

Aliás eu utiliza esse sistema todas as vezes que necessito ler um potenciometro ou uma grandeza externa, é mais simples e facil de alterar, basta mexer na memória...

Grato, :oops:
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor Vonnilmam » 29 Dez 2009 19:46

O blackmore....agora eu saquei o que vc quer fazer...

Ok, então faça da forma que te indiquei, eu trabalho com musica eletrônica a nível profissional (com toda a modestia, 90% dos instrumentos musicais nacionais são projétos de nossa autoria)...e todos são baseados no procolo MIDI 1.0..

A melhor forma é vc colocar na memória externa todos os parametros que desejar, no meu caso eu leio um potencometro com resolução do AD=8 bits (aliais são 16 potenciometros), pego cada valor e direciono diretamente para ler as posições de memória, aí nessa memória eu faço a curva que eu desejar em relação ao potenciometro (se vc não sabe a melhor curva para o potenciometro é uma curva exponencial, como um pot desse tipo é dificil de achar, fazendo assim na memória podemos gerar qualquer curva, sacou)...utilizo também outros parametros:

Por ex.: quando desejo adcionar vibrato ao timbre, é lá na memória que contém uma tabela (8 bits) onde eu "monto" a curva que eu quero afim de poder pegar esses valores e enviar para a serial....o mesmo se faz com os timbres....desta forma eu tenho a liberdade de comandar o timbre e também a altura (volume) indivualmente de cada timbre quando são chamados pelo usuário...

Modestia parte MIDI é comigo mesmo, sou doido por musica eletrônica, ja´mexo com isso a mais de 20 anos...heheheh, os cabelos estão brancos já!

Qual MCU vc esta usando? tem usart?...se tem é facil, basta vc programar para o TX enviar em 31250k....se não tem usart, me avisa que te envio uma rotina para tx midi via software (assembler)....melhor já vou postar aquí:

O protocolo midi parece ser simples de implementar, mas não o é, dependendo da aplicação e da sua complexidade, os recursos de software vão muito além, e envolvem técnicas complexas....

Uma dica é vc procurar utilizar tramas sisex entremeadas com o padrão midi basico, a trama sisex esta dentro do procolo midi e serve para comunicações especiais entre equipamentos do proprio fabricante, as vezes os equipamentos: teclados, samplers etc, não reconhecem o midi standart....se vc observar no protocolo midi existe os mesmos comandos em standart e também e sisex...observa isso!

; *********************************
; * Driver serial MIDI 31250 BPS *
; *********************************
; Este Driver serial assincrono envia dados com Baud rate de 31.250 bps,
; o BIT "COM2" é o pino de saida de dados seriais
;
Serial2:
Bank0
Movlw .8
Movwf Cont_Com2
Bcf Com2 ; START BIT
Prox:
Call TemporizaBit ; TEMPO de duracao do bit enviado
Rrf Twreg, F ; prox bit vai ao Carry
; TESTE SE E' 1 OU 0
Btfsc Status, C ; Ve se e' 1 ou 0. se for 0 executa "eh0"
Eh1:
Bsf Com2 ; Era 1. Seta a saida
Eh0:
Btfss Status, C ; Se era 1 este teste desvia
Bcf Com2 ; E' 0. Zera a saida
; ATUALIZA CONTADOR DE BITS
Decfsz Cont_Com2, F
Goto Prox ; ainda tem bit a enviar
; repete esperando o tempo do bit
; JA MANDOU TODOS. DELAY PARA STOP BIT
Call TemporizaBit
Bsf Com2 ; STOP BIT ( 1 Stop )
Call TemporizaBit
Return
;- - - - - - - -
Temporizabit:
Bank1
; Delay Baudrate p/ 31250kbps
Movlw .36; - Xt 16Mhz;.46 ;Xt 20Mhz; .18; = Xt 8.192Mhz;
Movwf Resetar1 ; Delay_Bit ;
Decfsz Resetar1, f ; Delay_Bit, F ; Acrescente + 14 ciclos ao calculo
Goto $-1 ; até a exposição do bit na saida
Bank0
Return
;---------------
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x