Forum: Mikrocontroller und Digitale Elektronik µC stürzt ab


von Sam (Gast)


Lesenswert?

Hi

Ich steh wieder mal vor einem Problem. Mein kleines Program funktioniert 
nicht. Ich hab schon viel überlegt, warum, und habe auch eine kleine 
Sicherheitsabfrage eingebaut, aber es funktioniert nicht. Das Prg grhört 
zu einem VU-Meter mit 10 Leds (so ne Zeile 7*gr-3*rt). AUfjedenfall 
leuchten alle Leds recht schwach und es geht garnichts mehr. Ich bin mir 
nicht sicher aber ich glaube es passiert beim anschlag. also beim Wert 
1023 vom ADC. Aber durch nachrechnen komm ich nicht auf einen ungültigen 
Wert.
1023 + 1 = 1024
Log2(1024) = 10
2 ^ 10 = 1024
1024 - 768 = 256
256 - 1 = 255 -> invertiert 0

Der Ausgang wird invertiert, da ich sonst die Leitung überkruzen müsste.
Und ja man könnte das sich mit dem Log sparen, aber so kann ich davor 
eine Zahl zw. 1 und 10 angeben und sie wird ausgegeben.

Hier der Code:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
4
Dim Ad As Word
5
Dim Temp As Single
6
Dim Pb As Byte
7
8
Config Portd = Output
9
Config Portb.0 = Output
10
Config Portb.1 = Output
11
Portb = 255 - 31
12
Config Adc = Single , Prescaler = Auto , Reference = Avcc
13
Start Adc
14
Portb = 0
15
Portd = 0
16
Waitms 100
17
18
Do
19
20
Ad = Getadc(0)
21
22
'Linear Method
23
'Ad = Ad / 94
24
25
'Expotential Method
26
Ad = Ad + 1 'Log 0 is imposible
27
Temp = Ad
28
Temp = Log(temp)
29
Temp = Temp / Log(2)
30
Ad = Temp
31
32
'LED Routine: Ad ^= On Leds
33
Ad = 2 ^ Ad
34
35
Pb = 0
36
If Ad = 512 Then
37
Ad = Ad - 256
38
Pb = 1
39
End If
40
If Ad = 1024 Then
41
Ad = Ad - 768
42
Pb = 3
43
End If
44
45
If Ad > 256 Then
46
'µC should never be here
47
Do
48
49
Toggle Portd
50
Waitms 100
51
52
Loop
53
54
End If
55
56
Ad = Ad - 1
57
Portd = 255 - Ad
58
Portb = 3 - Pb
59
60
Loop

von holger (Gast)


Lesenswert?

>Ich bin mir nicht sicher aber ich glaube es passiert beim anschlag.

Dann werd dir sicher. Alle LEDs einzeln nacheinander setzen bis
das Programm abkackt. Also ohne ADC ohne log() usw.

von spess53 (Gast)


Lesenswert?

Hi

Log -> natürlicher Logarithmus.

MfG Spess

von Sam (Gast)


Lesenswert?

spess53 schrieb:
> Log -> natürlicher Logarithmus.

Die Basis ist doch egal ich teil doch dadurch wieder:

Log_b(a) = Log(a) / Log(b)

verrückt!
Jetzt funktioniert es obwohl ich nachdem alle Tests funktionierten 
dasselbe Programm wieder draufgemacht hab.

Keine AHnung warum.

von Sam (Gast)


Lesenswert?

Leider nur eine Falschmeldung. Anderes Progamm gleiches Problem: Die 
Leds leuchten ganz schwach. Kann es sein, dass der ADC einen Quarz will 
(ich hab ihn mit 8Mhz intern laufen). Oder sollte ich noch ein paar 
Fusebits setzen?
Ich hab bisher:

SPIEN
BOOTSZ1
BOOTSZ0
SUT0
CKSEL 0,1,3

von Karl H. (kbuchegg)


Lesenswert?

Sam schrieb:
> Leider nur eine Falschmeldung. Anderes Progamm gleiches Problem: Die
> Leds leuchten ganz schwach. Kann es sein, dass der ADC einen Quarz will

Nein

> (ich hab ihn mit 8Mhz intern laufen). Oder sollte ich noch ein paar
> Fusebits setzen?
> Ich hab bisher:

BODEN kann nicht schaden

von Sam (Gast)


Lesenswert?

Toll! Darauf hätte ich früher kommen können!!!
Der 9V Block hatte nur noch 5V + Spannungsregler kann das nichts werden.
Ich dachte bei der sparsamen SChaltung kann das nicht der Fall sein. 
Tja, Kontrolle ist halt besser.
Sorry für eure Bemühungen.

von Sam (Gast)


Lesenswert?

Rein von der Theorie her kann mir jemand zu dem Vumeter tipps geben? Ist 
es besser wenn man ihn linear oder expotentiell steuert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.