Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[EL] VUMeter met 16F627A - special effects

Pagina: 1
Acties:

  • de.maarschalk
  • Registratie: Juni 2001
  • Laatst online: 27-05 10:46
Hallo,
ik heb de voorbije dagen wat liggen knutselen aan m'n VUMeter, maar met mijn beperkte kennis geraak ik niet verder dan een basic HDD Activiteitsmeter.
Het is me nog niet gelukt een presenteerbaar schema te tekenen in paint dus zak ik het maar met woord uitleggen.
Op de RA0 ingang van de PIC 16F627A komt het signaal binnen van de HDD Led, op RB0 tot RB7 stuur ik het signaal uit naar 8 verschillende leds.
Aangezien ik niets van assembler snap heb ik met MPLAB in C wat code proberen schrijven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#pragma config &=0x0000
#pragma config |=0x3F50

shrBank unsigned char ms;
shrBank unsigned char tien;
shrBank unsigned char sec;
shrBank unsigned char min;

#include "INT16CXX.H"
#pragma origin 4
interrupt int_server(void)
{
int_save_registers
if(T0IF)
    {
    TMR0=9;
    T0IF=0;
    ms++;
    if (ms==100)
        {
        ms=0;
        tien++;
        if (tien==10)
            {
            tien=0;
            sec++;
            if (sec==60);
                {
                sec=0;
                min++;
                }
            }
        }
    }
int_restore_registers
}

void ontdender(unsigned char x)
{
unsigned a,n;

for(a=0;a<x;a++) 
    {
    for(n=0;n<107;n++);
    nop();
    }
nop();
}


void main(void)
{
unsigned led;
TRISA=0b11111111;
TRISB=0b00000000;
PORTB=0b11111111;
PORTA=0b11111111;
CMCON=0x07;
OPTION=1;
ms=0;
tien=0;
sec=0;
min=0;
TMR0=1;
T0IF=0;
T0IE=1;
GIE=1;

while (1)
{
    while (1)
    {
        if (PORTA.1==0)
            {
            led++;
            ms++;
            
            }
        if (ms > 120)
            {
            led=0;
            ms=0;
            break;
            }
    }
if (led > 220 )
    {
    PORTB = 0b00000000;
    }
else if (led > 175 )
    {
    PORTB = 0b10000000;
    }
else if (led > 120 )
    {
    PORTB = 0b11100000;
    }
else if (led > 90 )
    {
    PORTB = 0b11110000;
    }
else if (led > 60 )
    {
    PORTB = 0b11111000;
    }
else if (led > 30 )
    {
    PORTB = 0b11111100;
    }
else 
    {
    PORTB = 0b11111111; 
    }
}
}


Zoals je ziet ben ik geen programmeerwonder, maar het ding werkt al een beetje! :D
M'n grootste zorg is dat de VUMeter (als je het zo kan noemen) met deze code eigenlijk hetzelfde doet als de HDD Led normaal zou doen. Nu zou ik graag wat meer een integrator (misschien een condensator op RA1 ofzo?) effect willen toevoegen dat je de ledjes apart wat meer op en neer ziet gaan en graag ook een falloff effect maar ik heb compleet geen idee hoe ik dat zou moeten coden.
Enige suggesties (met demultiplexers ofzo)? :)

P.S.: Die timercode is slechts een probeersel, moet je niet op letten!

  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 22-11 19:56

M-ThijZ

Riding on Rails

Je wilt een hdd-vu meter maken met ledjes? Waarom doe je dan zo moeilijk met een microcontroller. Een simpele a/d converter zou de oplossing al kunnen bieden. Pak anders de LM 3914, hier staat een schema voor een HD LED meter. Als het je gaat om de programmeer ervaring moet je natuurlijk gewoon doorgaan, of als ik je verkeerd begrepen hebt en je iets anders aan het bouwen bent.

  • de.maarschalk
  • Registratie: Juni 2001
  • Laatst online: 27-05 10:46
Zoals je al had geraden is het de bedoeling om wat meer over het PIC programmeren te leren, maar het loopt nog niet zo lekker. Als iemand met ervaring me ns op weg zou kunnen zetten geraak ik misschien al een heel eind verder! :)