Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Écran OLED 0.96 128x64
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#21 Message par satinas » dim. 12 janv. 2020 09:59

Bonjour, plus court, en asm c'est jamais fini :-)

Code : Tout sélectionner

     ; posy                             ; 00pppyyy
     rlncf  posy,W                      ; 0pppyyy0
     swapf  WREG                        ; yyy00ppp
     andlw  B'00000111'                 ; 00000ppp
     iorlw  B'10110000'                 ; 10110ppp
     rcall  command_ssd1306             ; envoi page

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#22 Message par Temps-x » mar. 14 janv. 2020 16:08

Bonjour satinas, et tout le forum,

Je te réponds que maintenant, parce que je suis sur un projet qui me demande toute ma concentration.

Division par 8 pour trouver la page sur écran OLED 128x64

Code : Tout sélectionner


     rrncf  WREG
,F                        ; 00011100
     rrncf  WREG
,F                        ; 00001110
     rrncf  WREG
,F                        ; 00000111



Cette méthode est bonne, mais si tu utilises la fonction rrncf (rotation à droite sans carry) tu vas avoir des erreurs (j'ai contrôlé avec MPLAB 8.92).

Obligé d'écrire ceci, je sais c'est pas très économique en matière d'optimisation

Code : Tout sélectionner


      bcf STATUS
,C                        ; se positionner à la page
      rrcf posy
,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F  



Pour afficher un pixel sur l'écran ou on veut

Code : Tout sélectionner


pixel
      movf posy
,W                         ; sauvegarde 
      movwf tmps1                         
; 

      movf posx
,W                         ; sauvegarde
      movwf tmps2                         
; 
       
      bcf STATUS
,C                        ; se positionner à la page
      rrcf posy
,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F                         ;

      movf posy,W                         ;  
      mullw D
'8'                          ; multiplier W=(page x 8 bits), résultat dans PRODH PRODL                                        

      rcall position_ssd1306              
; positionnement

      movf tmps2
,W                        ; récupération de la sauvegarde 
      movwf posx                          
; 

      movf PRODL
,W                        ; 
      subwf tmps1
,F                       ; posy - (page x 8 bits) 

      movlw D
'0'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W                       
      btfsc STATUS
,Z                      
      movlw B
'10000000'                   ; 

      movlw D
'1'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00000001' 

      movlw D
'2'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00000010' 

      movlw D
'3'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00000100' 

      movlw D
'4'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00001000' 

      movlw D
'5'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00010000' 
                     
      movlw D
'6'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'00100000' 

      movlw D
'7'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'01000000' 

      movlw D
'8'                          ; test pour trouver le pixel à allumer
      xorwf tmps1
,W              
      btfsc STATUS
,
      movlw B
'10000000' 

      rcall donner_ssd1306                
; allumer le pixel



Cette méthode permet d'inscrire un pixel précisément sur l'écran, il y a plus cas l'optimisé, je suis dessus actuellement, quand j'aurais trouvé mieux je mets ici.

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#23 Message par satinas » mar. 14 janv. 2020 22:54

Bonsoir Temps-x
Pour la page, je pense pas qu'il y ait mieux que les 4 ins de mon dernier post (où ça des erreurs ?).
Pour la position 0 à 7, pourquoi pas un truc comme ça (3 ins) :

Code : Tout sélectionner

   movlw  B'00000111'
   andwf  posy,W
   movf   PLUSW2,W            ; table de 8 octets stockée en FSR2
   rcall  donner_ssd1306

Sur les pics, l'adressage indirect est aussi rapide que l'adressage direct, et il est bien pratique.

Il faudrait mettre l'envoi de la colonne en premier. Ainsi on pourrait la sauter pour le tracé du petit oscillo dont tu as parlé. Autant profiter de l'auto-incrémentation de la colonne faite par le lcd.

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#24 Message par Temps-x » mer. 15 janv. 2020 00:51

Bonsoir satinas, et tout le forum,

:roll: Je viens de résoudre l'énigme, et sans table

Code : Tout sélectionner


      movf posy
,W                         ; sauvegarde 
      movwf tmps1                         
; 

      movf posx
,W                         ; sauvegarde
      movwf tmps2            

      bcf STATUS
,C                        ; se positionner à la page
      rrcf posy
,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F                         ;
      bcf STATUS,C                        ;
      rrcf posy,F                         ;

      rcall position_ssd1306              ; se positionné à la page demandé, et la longueur demandé
 
      movf posy
,W                         ;  
      mullw D
'8'                          ; multiplier W=(page x 8 bits), résultat dans PRODH PRODL                                        

      movf PRODL
,W                        ; 
      subwf tmps1
,F                       ; posy - (page x 8 bits) 

      clrf WREG

      bsf STATUS
,C

ocs_ret
      rrcf WREG
,F
      decfsz tmps1
,F                      ;
      bra osc_ret
      
      rcall donner_ssd1306               
; envoi du pixel (et effacement des 7 autres pixels si pas de buffer pic)



satinas a écrit :Source du message Il faudrait mettre l'envoi de la colonne en premier. Ainsi on pourrait la sauter pour le tracé du petit oscillo dont tu as parlé. Autant profiter de l'auto-incrémentation de la colonne faite par le lcd.


:roll: On peut rien te caché, oui c'est ce que je fais..... j'ai pas vu d'oscilloscope en version Pic avec un écran aussi petit, et ça permettrais qu'un débutant s'amuse à le refaire.

D'après mes calculs, je pense qu'on pourras mesurer au maximum des fréquences allant jusqu’à 200KHz, après j'espère qu'on pourras m'aider un peu pour l'électronique.

Il faut que je vois avec le convertisseur analogique du pic, car c'est lui qui fait le spot, pour le visionnage pas la peine de se presser vu la lenteur de l’œil .

Voila le code pour le scan numérique, qui fait office de spot

Code : Tout sélectionner


scan_numérique

      bcf led1

      movlw D
'100'                        ; nombre de pixel sur la longueur 
      movwf temps       
      
      lfsr FSR0
,H'100'                    ; FSR0 pointe sur le début de la banque 1 
re_scan
      bsf ADCON0
,ADON                     ; on lance l’acquisition (charge du condensateur)

      bsf ADCON0,GO                       ; lancer la conversion A/D

      btfsc ADCON0
,GO                     ; si le bit GO est à 1 on va à la ligne 1        
      bra 
$-D'2'                          ; convertion n'est pas terminer     
      
      movff ADRESH,POSTINC0               ; récupérer la valeur

      bcf ADCON0,ADON                     ; fin de conversion, éteindre convertisseur     

      ; rcall                             ; delay de la vitesse du spot, voir avec temporisation
                                          ; 50ms, 20ms, 10ms, 5ms, 2ms, 1ms, 500us, 200us, 100us
      decfsz temps                        ;
      bra re_scan  

      return



:roll: Je ne sais pas si on est obligé de coupé la fin de conversion pour chaque scannage .


Je vais aussi mettre l'option PWM avec un sélecteur qui couvrira les fréquences 1000Hz, 1500Hz, 2000Hz, 20000Hz de 0% à 99%

De plus on peut aussi rajouter le fréquencemètre, qui pourras aller jusqu'à 50 Mhz.

Voilà ou j'en suis, ici contrôl d'un signal carré

020901.jpg


==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#25 Message par Temps-x » jeu. 16 janv. 2020 01:15

Bonjour tout le forum,

Contrôle d'une sinus, pas encore au point mais ça avance, bon.... :roll: il faut que je comprenne pourquoi j'ai des pointillés.

005321.jpg


J'ai rajouté, aujourd'hui, sélection du voltage de 0,1 volts à 50 volts sur 9 choix, calibre des temps de 50ms à 100µs sur 10 choix, inversion du contrôl du signal, gel de l'écran pour observation, vers la droite du haut, je vais mettre la fréquence.

J'ai fait une petite vidéo sur l'oscilloscope en bas du post #1

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#26 Message par paulfjujo » jeu. 16 janv. 2020 18:10

bonsoir


Temps-x a écrit :je ne sais pas si on est obligé de coupé la fin de conversion pour chaque scannage .


pas besoin, puisque tu sors de la boucle de test avec la valeur à zero

Temps-x a écrit :Bonjour tout le forum,

Contrôle d'une sinus, pas encore au point mais ça avance, bon.... :roll: il faut que je comprenne pourquoi j'ai des pointillés.


tu injectes quelle frequence de signal ?

à mon avis because nombre de sample/sec insuffisant ..

est-ce que tu affiches en temps reel ou acquisition de 128 points puis affichage ?

sur un oscillo il faut alors tracer des segments (par interpolation) et pas des points ..
j'avais bien potassé ce sujet il y a des lustres déja .. SCOPE PC avec ADC sur port parallele

Je n'ai pas tenter d'en refaire un à base de PIC car
pour moi l'ADC du PIC n'est pas assez performant ..
même avec FOSC 64MHz , qui n'apporte pas grand chose ,puisque qu'il faut respecter un delai global definit en µS
(somme de delais "obligatoires" )+ un, dont on ne parle guere ,
le delai necessaire AUSSI entre chaque lancement d'acquisition.

ceci-dit , ça n'enleve en rien la qualité de cette belle realisation .
Aide toi, le ciel ou FantasPic t'aidera

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#27 Message par Temps-x » jeu. 16 janv. 2020 20:16

Bonsoir paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message pas besoin, puisque tu sors de la boucle de test avec la valeur à zero


S’effectue 100 scannes, et j'éteinds le convertisseur 100 fois, d'ou la question.

Code : Tout sélectionner

    bcf ADCON0,ADON                     ; fin de conversion, éteindre convertisseur


paulfjujo a écrit :Source du message tu injectes quelle frequence de signal ?

Actuellement 250 Hz
paulfjujo a écrit :Source du message est-ce que tu affiches en temps réel ou acquisition de 128 points puis affichage ?

Quand j'ai 100 passage numérisé s'affiche le résultat.

100 pixels qui corresponde à la longueur que je me suis fixé, je garde 28 pixels pour affichage de la tension maxi et mini
paulfjujo a écrit :Source du message sur un oscillo il faut alors tracer des segments (par interpolation) et pas des points .

Je viens de le comprendre que maintenant, et avec ce que tu me dis ça se rejoints.

J'ai regardé la vidéo de l'oscilloscope Arduino on voit qu'ils relies les points entre eux, donc pas besoin de 100 scannes numérique.

paulfjujo a écrit :Source du message pour moi l'ADC du PIC n'est pas assez performant


A titre d'information, le chinois qui à réalisé son oscilloscope à une période d'échantillonnage maximale de 8 μs et il mesure des fréquences jusqu'à 10kHz.

ADC du Pic18F26K22

ADC.jpg

A voir par la suite, pour utilisation d'un convertisseur ADC extérieur

paulfjujo a écrit :Source du message j'avais bien potassé ce sujet il y a des lustres déja .. SCOPE PC avec ADC sur port parallele


Merci ! pour le lien 8-) ==> je vais tout lire .... :sifflotte: et essayé de tout comprendre.


Avoir eu un petit résultat, même partielle, ça me motive à aller plus loin.

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#28 Message par Temps-x » jeu. 30 janv. 2020 17:03

Bonsoir tout le forum,

paulfjujo a écrit :Source du message Je n'ai pas tenter d'en refaire un à base de PIC car pour moi l'ADC du PIC n'est pas assez performant ..

C'est vrai, et je confirme...

J'ai avancé dans mon programme d'oscilloscope, conclusion, avec ADC du Pic18F26K22 on ne pourra pas dépasser les 20000 Hz (20khz).

Reste à faire, l'interpolation des points entre eux, stabilisation de l'affichage sur l'écran, et affichage sans effacer les points affiché à l'écran.

Même si c'est un petit oscilloscope de très basse qualité, c'est enrichissant sur tout point de vue.

Je vais envoyer via un petit émetteur les données sur PC(100 octets) toutes les 100ms, protocole Eusart, pour y reproduire le signal via un petit programme.

J 'ai commencé le programme pour le PC qui reflet exactement le visuelle de l'écran (sans émetteur pour l'instant) les données je l'ai avait inscrite en Eeprom) via un enregistrement par bouton poussoir.

Osc2.jpg


==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#29 Message par Temps-x » dim. 9 févr. 2020 02:50

Bonsoir tout le forum,

Voila je viens de dégrossir la version du logiciel sur PC, de plus j'ai mis une nouvelle vidéo pour ceux qui l'aurais pas vue en Post #1

Logiciel pour Pc

osc-1.jpg


:roll: La question que je me pose maintenant, qu'est ce que je vais prendre comme émetteur et récepteur.....

:sifflotte: nRF24L01+ ..... :mur:

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 9 févr. 2020 15:41, modifié 2 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Écran OLED 0.96 128x64
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#30 Message par paulfjujo » dim. 9 févr. 2020 10:16

Temps-x a écrit :... La question que je me pose maintenant, qu'est ce que je vais prendre comme émetteur et récepteur.....
nRF24L01+ ..... :mur:

==> A+



nRF24L01+, j'en ai acheté 4 .. toujours pas testés correctement!
:mur: oui... compliqué par rapport au HC12 !

autrement : bluetooth !
un module RN41 click Maitre coté PC et 1 RN41 esclave coté PIC
( c'est ce que j'utilise entre mon PIC EDFinfo sur Linky et mon PC EEPC Windows XP et appli RQbasic


ou
une cle USB APM EDR classe1 coté PC ou un VRAI HC05 Maitre
et un simple module Bluetoooth HC05 ou HC06 coté PIC
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Roger et 37 invités