[SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

hlide a écrit : 03 nov. 2024 15:46 Les voici (.csv compressés en .7z) : [ B, COLR, CLKN ] et [ COLR, CLKN, VION ] - https://transfert.free.fr/Lbk7XvH
Pour le Sigrok, il faut extraire le FW or je ne suis pas sous Linux.
[ B, COLR, CLKN ] contient 2.68 millions d'échantillons, Excel ne peut en traiter que 1.05 million. Python est moins limitatif...
[ COLR, CLKN, VION ] en contient 2.9 millions.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Vu que c'est un fichier texte à la base, il suffit de prendre la moitié ou le tiers ou moins encore en coupant à la ligne.
Bricox a écrit : 05 nov. 2024 09:37
Merci pour l'astuce du tableau.
Je pense qu'il y a des valeurs parasites probablement liées à l'imprécision de la capture (LA1010 est supposé ne pas descendre à moins de 20 ns mais on peut voir une résolution de 10 ns). Il est possible que l'on devrait mettre un t(/CLK) <= t(/VIO) et non t(/CLK) < t(/VIO) dans l'algo du Python pour ne par exclure le cas d'un /CLK et d'un /VIO changeant d'état simultanément parce que la capture n'est pas synchro avec leur véritables instants de changement d'état.
Dernière modification par hlide le 05 nov. 2024 11:19, modifié 2 fois.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

<doublon>
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Comparaison d'une distribution FM-Bleu_FD-Clk entre Bricox/Excel et Hlide/Python :

Bricox/Excel Hlide/Python
FM-Bleu_FD-Clk.png
FM-Bleu_FD-Clk.png (5.3 Kio) Consulté 302 fois
Image


Un de nous deux devrait avoir juste ... mais lequel ?
Tu as 17K détections pour 2.62 M éch, moi, 7K détections pour 1.04 M éch, c'est cohérent ... :o
Tes doubles barres ne sont pas justifiées avec une résolution de 10 ns, cela ressemble à un artéfact.
Pour un front montant, je retiens l'index de niveau haut.
Pour un front descendant, je retiens l'index de niveau bas, quid ?
J'ai vérifié, à la main, pour mes 2 1er Ech., j'ai bien 70 et 80ns, c'est OK.

Code VBA d'extraction des durée entres les 2 fronts :

Code : Tout sélectionner

Public Sub distribBleuClk()
Dim i&, cpt&, fmb&
    cpt = 2: fmb = 0: i = 2
    Do
        Do
            i = i + 1
            If i = Rows.Count Then GoTo fin
        Loop While (Cells(i, 3) = 0 Or Cells(i - 1, 3) = 1)
        fmb = i
        Do
            i = i + 1
            If i = Rows.Count Then GoTo fin
        Loop While (Cells(i, 5) = 1 Or Cells(i - 1, 5) = 0)
        Cells(cpt, 8) = CInt((Cells(i, 1) - Cells(fmb, 1)) * 1000000000)
        cpt = cpt + 1
     Loop While 1
fin:
End Sub
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Je pense avoir trouvé l'écart.

Mon B-CLK ressemble à ton B-COLR ... :D
Et moi, je suis sûr d'avoir pris CLK ... :), c'est l'avantage d'Excel, les données sont visibles.

Bricox/Excel Hlide/Python
Image Image
Dernière modification par Bricox le 05 nov. 2024 14:41, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Je ne suis pas sûr de ton code VB (les Cells[i, 3/5], ça parle pas trop) : on dirait qu'il cherche un B->1 puis le /CLK->0 puis un B->0. Du coup, tu sembles mesurer le temps avec le /CLK suivant qui se déclenche pour le pixel suivant et non pas avec le /CLK qui est à l'origine du changement d'état de B.

Je te rappelle que le B n'est pas toujours présent à la suite d'un /CLK (mon MZ-700 est malade, il me dessine un tas de charactère avec des couleurs divers) et donc je fais avec ce que j'ai.
Dernière modification par hlide le 05 nov. 2024 14:49, modifié 1 fois.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Ok, je revéfifie ... :) , cela me semble toujours OK

Voici mon FM-Bleu_FD-Col :

FM-Bleu_FD-Col.png
FM-Bleu_FD-Col.png (4.83 Kio) Consulté 276 fois
Dernière modification par Bricox le 05 nov. 2024 15:19, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Je t'explique ce que fait le script python :

Code : Tout sélectionner

# Trouver les indices des fronts descendants de CLKN
clk_falling_edges = df[(df['CLKN'].shift(1) == 1) & (df['CLKN'] == 0)].index
Il récupère les échantillons où /CLK passe de 1 à 0. Ca contient les indices de ces échantillons.

Code : Tout sélectionner

# Trouver les indices des fronts montants de B
b_rising_edges = df[(df['B'].shift(1) == 0) & (df['B'] == 1)].index
Il récupère les échantillons où B passe de 0 à 1. Ca contient les indices de ces échantillons.

Code : Tout sélectionner

# Calculer les périodes entre les fronts
periods = []
for b_index in b_rising_edges:
    # Trouver le dernier front descendant de CLKN avant le front montant de B
    clk_index = clk_falling_edges[clk_falling_edges < b_index].max()
    if not pd.isna(clk_index):
        period = df.loc[b_index, 'Time'] - df.loc[clk_index, 'Time']
        periods.append(period)
Pour tout B->1, on recherche l'indice /CLK->0 dont l'instant est le plus proche de celui de B->0 mais dans le passé. Si on le trouve, on calcule la période puis on l'ajoute dans notre liste de période. Comme le signal /CLK->0 est une horloge bien rodée, je suis sûr de trouver le bon instant de /CLK->0 qui est à l'origine de ce B->1.

EDIT: sauf si le /CLK->0 qui est à l'origine est retardé de 1 ou plusieurs cycles par un "delay" hypothétique entre le CK de l'IC qui produit les VIO et /BIO, et le /CLK.
Dernière modification par hlide le 05 nov. 2024 15:23, modifié 1 fois.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

hlide a écrit : 05 nov. 2024 14:40 Je ne suis pas sûr de ton code VB (les Cells[i, 3/5], ça parle pas trop) : on dirait qu'il cherche un B->1 puis le /CLK->0 puis un B->0. Du coup, tu sembles mesurer le temps avec le /CLK suivant qui se déclenche pour le pixel suivant et non pas avec le /CLK qui est à l'origine du changement d'état de B.
Du coup, j'ai fait la confusion, car l'écart de durée n'est pas signé, d'où une perte d'informations .... comme je l'avais indiqué.

Pour éviter cette confusion, il serait souhaitable, quand nous parlons de 2 signaux, de les indiquer dans l'ordre chronologique ... :D
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Comparaison d'une distribution FD-Clk_FM-Bleu entre Bricox/Excel et Hlide/Python :

Bricox/Excel+VBa Hlide/Python
FD-Clk_FM-Bleu.png
FD-Clk_FM-Bleu.png (9.73 Kio) Consulté 125 fois
Image

Gagné ... J'ai peiné ... :D

Code VBA d'extraction des durées, entre les 2 fronts :

Code : Tout sélectionner

Public Sub distribBleuClk()
Dim i&, cpt&, fmb&
    cpt = 2:  i = 2: Application.Calculation = xlManual
    Do
        Do
            i = i + 1: If i = Rows.Count Then GoTo fin
        Loop While (Cells(i, 3) = 0 Or Cells(i - 1, 3) = 1)
        fmb = i
        Do
            i = i - 1
        Loop While (Cells(i, 5) = 1 Or Cells(i - 1, 5) = 0)
        Cells(cpt, 8) = CInt((Cells(fmb, 1) - Cells(i, 1)) * 1000000000)
        cpt = cpt + 1: i = fmb
     Loop While 1
fin:
    Application.Calculation = xlAutomatic
End Sub
Dernière modification par Bricox le 06 nov. 2024 08:48, modifié 5 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Comparaison d'une distribution FD-Col_FM-Bleu entre Bricox/Excel et Hlide/Python :
tabat
Bricox/Excel Hlide/Python
FD-Col_FM-Bleu.png
FD-Col_FM-Bleu.png (6.78 Kio) Consulté 232 fois
Image

pas Gagné ... :cry: à moins que tu aies ignoré les valeurs au delà de 110ns

Code VBA d'extraction des durées, entre les 2 fronts :

Code : Tout sélectionner

Public Sub distribBleuColr()
Dim i&, cpt&, fmb&
    cpt = 2: fmb = 0: i = 2: Application.Calculation = xlManual
    Do
        Do
            i = i + 1: If i = Rows.Count Then GoTo fin
        Loop While (Cells(i, 3) = 0 Or Cells(i - 1, 3) = 1)
        fmb = i
        Do
            i = i - 1
        Loop While (Cells(i, 4) = 1 Or Cells(i - 1, 4) = 0)
        Cells(cpt, 9) = CInt((Cells(fmb, 1) - Cells(i, 1)) * 1000000000)
        cpt = cpt + 1: i = fmb
     Loop While 1
fin:
    Application.Calculation = xlAutomatic
End Sub
Dernière modification par Bricox le 11 nov. 2024 09:20, modifié 2 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

C'est normal, ton code ne semble détecter que les COLR->0, alors qu'il devrait faire sur COLR->1 ou COLR->0 :

Code : Tout sélectionner

Loop While (Cells(i, 4) = Cells(i - 1, 4))
D'ailleurs, il faut que je vérifie que le code python fait bien ça... je parie que non.

A priori, il détecte bien les deux fronts de COLR et prend celui qui est le plus près dans le passé.
Figure_1.png
Figure_1.png (22.5 Kio) Consulté 186 fois
Dernière modification par hlide le 05 nov. 2024 19:49, modifié 2 fois.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Merci pour ces précisions, hlide.

Tu me l'avais déjà dit, mais j'avais oublié ... :o, je corrige ... aussitôt que le PC Excel est libre ... c'est le PC de ZamZam.

Code : Tout sélectionner

(Cells(i, 4) = 1 Or Cells(i - 1, 4) = 0)
devient

Code : Tout sélectionner

((Cells(i, 4) = 0 Or Cells(i - 1, 4) = 1)) And (Cells(i, 4) = 1 Or Cells(i - 1, 4) = 0))
Merci de réaliser un "align" avec tes barres, car c'est trompeur et pas de signification utile ...

J'ai regardé les spécs de notre Hantek 4032L : Résolution 2ns, BP 150MHz, Sample rate 400Ms/s, sur 32 voies, export CSV, compatible Sigrok.
la doc
Dernière modification par Bricox le 05 nov. 2024 21:01, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1103
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Comparaison d'une distribution FD-Col_FM-Bleu entre Bricox/Excel et Hlide/Python :

Bricox/Excel+VBa Hlide/Python
FD-Col_FM-Bleu.png
FD-Col_FM-Bleu.png (10.22 Kio) Consulté 125 fois
Image

Gagné ... grâce à ta patience légendaire.

Code VBA d'extraction des durées, entre les 2 fronts :

Code : Tout sélectionner

Public Sub distribBleuColr()
Dim i&, cpt&, fmb&
    cpt = 2: fmb = 0: i = 2: Application.Calculation = xlManual
    Do
        Do
            i = i + 1: If i = Rows.Count Then GoTo fin
        Loop While (Cells(i, 3) = 0 Or Cells(i - 1, 3) = 1)
        fmb = i
        Do
            i = i - 1
        Loop While (Cells(i, 4) = 0 Or Cells(i - 1, 4) = 1) And (Cells(i, 4) = 1 Or Cells(i - 1, 4) = 0)
        Cells(cpt, 9) = CInt((Cells(fmb, 1) - Cells(i, 1)) * 1000000000)
        cpt = cpt + 1: i = fmb
     Loop While 1
fin:
    Application.Calculation = xlAutomatic
End Sub
Dernière modification par Bricox le 06 nov. 2024 08:46, modifié 3 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4103
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

hlide a écrit : 05 nov. 2024 17:59
J'ai modifié la figure pour faire apparaitre en pourcentage plutôt que le nombre d'échantillons dans la plage. Et ajusté les plages pour éviter les doublons de barres. Je ne maîtrise pas complètement PLOT.

Sinon, pour moi la détection de front me parait plus simple avec

Code : Tout sélectionner

Loop While (Cells(i, 4) = Cells(i - 1, 4))
qui équivaut à :

Code : Tout sélectionner

X = Y <=> NOT (X XOR Y)
      <=> NOT((X = 1 AND Y = 0) OR (X = 0 AND Y = 1))
      <=> NOT(X = 1 AND Y = 0) AND NOT(X = 0 AND Y = 1)
      <=> (X = 0 OR Y = 1) AND (X = 1 OR Y = 0)
Après je ne suis pas un spécialiste du VB.
Répondre