problem z podtrzymaniem wartości


Witam,

Mam do was pytanko. Mam zmienną w Atmedze32 którą deklaruję: "Dim Zadana As single". Następnie na początki programu, przed główną pętlą "do loop" wpisuję jej wartość np. Zadana = 50. Program uruchamia się z taką wartością natomiast po kilku sekundach (losowo) zmienna zmienia wartość na 32 a potem na zero. Nie jest ona przeze mnie nadpisywana w innym miejscu programu. Docelowo zmienna ta będzie pochodziła z wejścia ADC (alias) i nie będzie problemu z jej podtrzymaniem. Ale zastanawiam się w czym jest problem?




Portret użytkownika tms

A mógłbyś pokazać ten Twój

A mógłbyś pokazać ten Twój kod? Na pewno ułatwi to wszystkim rozwiązanie problemu :)

Portret użytkownika LukaszZ1234

kod...chodzi o zmienną Pozycjazad...Chętnie przyjmę krytykę

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m32def.dat"
$crystal = 16000000
 
Config Pinb.0 = Output
Config Pinb.1 = Output
 
Config Pinb.2 = Input
Set Portb.2
Config Pinb.3 = Input
Set Portb.3
Config Pinb.4 = Input
Set Portb.4
 
 
 
 
 
Config Porta = Input
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
 
 
Config Lcd = 16 * 2
'wyświetlacz 16*2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
'konfiguracja pinów
 
Cls
Cursor Off Noblink
 
Locate 1 , 1
Lcd "AktPoz:"
Lowerline
Lcd "ZadPoz:"
 
 
Config Timer0 = Timer , Prescale = 1024
Enable Timer0 : On Timer0 Przerwanie
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Nazwy *******************
'***********************************************
Outimpp Alias Portb.0
Outimpl Alias Portb.1
 
'*************  Nazwy Koniec  ****************
 
'******************  Zmienne *******************
'***********************************************
Dim Licznik As Single
Dim Dlugoscimp As Single
 
 
 
Dim Imptmax As Single
Dim Odchylkamax As Single
Dim Imptmin As Single
Dim Odchylkamin As Single
Dim M As Bit
Dim Odchylkadodatnia As Bit
Dim Odchylkaujemna As Bit
 
 
 
 
Dim Pozycja As Word
Dim Pozycjaskal As Single
Dim Odchylka As Single
Dim Aktpozwys As String * 11
Dim Pozycjazad As Single
Dim Pozycjazadwys As String * 11
 
 
 
 
 
'*************  Zmienne Koniec  ****************
 
 
 
'************ Warunki Poczatkowe ***************
'***********************************************
   Licznik = 0
   Imptmax = 20
   Imptmin = 5
   Pozycjazad = 60
   Dlugoscimp = 0
   M = 0
 
   Odchylkamin = 3
   Odchylkamax = 50
 
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 Pozycjazad = Pozycjazad
 
 
 
'przeliczenie aktualnej pozycji'
 
   Pozycja = Getadc(0)
   Pozycjaskal = Pozycja
   Pozycjaskal = Pozycjaskal - 26
   Pozycjaskal = Pozycjaskal * 0.154
 
'wyswietlanie aktualnej pozycji i zadanej'
 
   Locate 1 , 9
   Aktpozwys = Fusing(pozycjaskal , "#.#####")
   Lcd Aktpozwys
 
   Locate 2 , 9
   Pozycjazadwys = Fusing(pozycjazad , "#.#####")
   Lcd Pozycjazadwys
 
 
'inkrementacja pozycji zadanej'
 
   If Pinb.2 = 0 And Pozycjazad <= 90 Then Pozycjazad = Pozycjazad + 0.1
   If Pinb.3 = 0 And Pozycjazad >= 0 Then Pozycjazad = Pozycjazad - 0.1
 
'*************Impulsator*************************'
 
'liczenie wartosci bezwzglednej odchylki'         '
 
If Pozycjazad >= Pozycjaskal Then
Odchylka = Pozycjazad - Pozycjaskal
Odchylkadodatnia = 0
Odchylkaujemna = 1
Else
End If
 
If Pozycjazad < Pozycjaskal Then
Odchylka = Pozycjaskal - Pozycjazad
Odchylkadodatnia = 1
Odchylkaujemna = 0
Else
End If
 
 
'Skalowanie wykresu impulsatora'
 
 
'warunki załączenia
 
 
 
If Odchylka <= Odchylkamin And M = 0 Then Reset Outimpp
If Odchylka <= Odchylkamin And M = 0 Then Reset Outimpl
 
 
If Odchylka > Odchylkamin And Odchylka < Odchylkamax Then
Dlugoscimp = Odchylka
M = 1
Else
M = 0
End If
 
If Odchylkadodatnia = 1 Then Set Outimpp
If Odchylkaujemna = 1 Then Set Outimpl
 
If M = 0 Then
If Odchylka >= Odchylkamax And Odchylkaujemna = 1 Then
Set Outimpp
Else
End If
If Odchylka >= Odchylkamax And Odchylkadodatnia = 1 Then
Set Outimpl
Else
End If
Else
End If
 
 
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Przerwanie:
 Incr Licznik
 If Licznik = 50 Then Licznik = 0
If M = 1 And Odchylkaujemna = 1 Then
 If Licznik < Dlugoscimp And Odchylkadodatnia = 0 Then Set Outimpp
 If Licznik > Dlugoscimp And Odchylkadodatnia = 0 Then Reset Outimpp
Else
End If
 
If M = 1 And Odchylkadodatnia = 1 Then
 If Licznik < Dlugoscimp And Odchylkaujemna = 0 Then Set Outimpl
 If Licznik > Dlugoscimp And Odchylkaujemna = 0 Then Reset Outimpl
Else
End If
 
Return
'******** Przerwanie timer 0 Koniec ************

Portret użytkownika tms

Chodzi o zmienną Pozycjazad ?

Chodzi o zmienną Pozycjazad ?

Portret użytkownika gosc

Tak

Jak w tytule:)

Portret użytkownika LukaszZ1234

tak

zgadza się. Chodzi o zmienną Pozycjazad...

Portret użytkownika mirley

Re; Program

Na początek wywal to:

Pozycjazad = Pozycjazad

i linijki od przycisków zmieniające ta zmienną. Sprawdź czy się zmienia. Potem dodaj linijki od przycisków i sprawdź znowu

Ps. do kodu w bascomie uzywa się znacznika BAS

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika LukaszZ1234

witam

Co do linijki Pozycjazad = Pozycjazad to ją dodałem, żeby właśnie spróbować zapobiec znikaniu wartości (może głupi pomysł ale spróbowałem i potem to jakoś zostało). Dziś w wolnej chwili usunę te linijki ze zmianą wartości zadanej za pomocą dwóch pinów i sprawdzę czy to jest wina tego miejsca w programie

Dzięki za odpowiedź
Pozdrawiam