Página 1 de 2

7 bits?

MensagemEnviado: 27 Dez 2009 22:54
por _blackmore_
É possível utilizar direto o conversor AD de um pic para resolução em apenas 7 bits? (valor final de 127)

Re: 7 bits?

MensagemEnviado: 28 Dez 2009 07:23
por andre_luis
_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 )

+++

MensagemEnviado: 28 Dez 2009 08:25
por MOR_AL
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

MensagemEnviado: 28 Dez 2009 17:29
por ze
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ç

MensagemEnviado: 28 Dez 2009 17:33
por Jorge_Francisco
Coloque o AD em 8 bits e rotacione conforme disseram. Perde-se 20mV de resolução.

MensagemEnviado: 28 Dez 2009 20:18
por MOR_AL
Editei minha mensagem anterior.

O registro ADRESL está no banco 1!

MOR_AL

MensagemEnviado: 28 Dez 2009 22:45
por _blackmore_
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!

MensagemEnviado: 29 Dez 2009 02:15
por jorgeluiz
porque nao 9 bits? 5,12 Volts = 512 posiçoes. 0,1 de resoluçao.

MensagemEnviado: 29 Dez 2009 03:06
por _blackmore_
é 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 ...

MensagemEnviado: 29 Dez 2009 07:16
por fabim
á 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

MensagemEnviado: 29 Dez 2009 10:24
por _blackmore_
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!

MensagemEnviado: 29 Dez 2009 10:41
por fabim
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

MensagemEnviado: 29 Dez 2009 10:47
por _blackmore_
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 ...

MensagemEnviado: 29 Dez 2009 19:30
por Vonnilmam
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:

MensagemEnviado: 29 Dez 2009 19:46
por Vonnilmam
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
;---------------