Bascom-PWM


Witam. Zaczynam naukę programowania w bascomie przy okazji buduję linefollowera na tiny2313. Program udało mi się napisać bez większych problemów, jednak chciałbym go niedługo wzbogacić, m.in. o PWM. Tu się zaczyna problem-mimo że trochę poczytałem nie wiem jak to zrobić.
Powiedzmy, że chciałbym, aby na którymś porcie(obojętnie którym) był generowany sygnał o niezmiennej(niezależnie co się dzieje w programie) szerokości impulsu.
Na początku, w configu dopisuję:

Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Jednak nie wiem co dalej-jak ustawić port na którym ma być przebieg i jak ustawić jego wypełnienie?

Pozdrawiam




Portret użytkownika mirley

Re: PWM

Portu nie da się ustawić, jest ściśle określony. PWM jest dwukanałowy dla timera 1 a wyjściami są piny OC1A (PB3) i OC1B(PB4). Z twojego configa wynika że chcesz 8 bitowy PWM więc do rejestrów CompareA i compareB trzeba teraz wpisać jakieś tam wartości wypełnienia 0-255

-

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 nanab

Chyba znalazłem. Pwm1a = 255

Chyba znalazłem.

Pwm1a = 255 'wypelnienie 100%
Pwm1b = 255 'wypelnienie 100%

Jeśli umieszczę to przed główną pętlą, to powinno działać tak, jak napisałem?

Portret użytkownika rafliczek22

Możesz to skonfigurować

Możesz to skonfigurować bezpośrednio w rejestrach, a wsp. wypęlnienia możesz ustawiać wpisując wartość w rejestry ocr1a/ocr1b.

Pozdrawiam, Rafał.

Portret użytkownika gosc

Dalej PWM

mam kilka pytań związanych z PWM i Atmegą
atmega48,moc3041,bt139 - chciałem z użyciem bliźniaczego układu jak Twój element wykonawczy sterować żarówką 230v - płynna regulacja jasności, jednak strasznie miga. zmiany prescalera w configu pwm nie wiele pomagają . czy winą jest przełączanie w zerze przez moc3041 ? - nie mam innego by to sprawdzić.

Przy okazji - w ogóle jak to jest że na PWM preskalerze poniżej 256 np silniczek 5VDC sterowany przez L293DNE ma strasznie mały moment pomimo pełnej regulacji wypełnienia ?

Portret użytkownika noki

Do sterowania żarówką jest

Do sterowania żarówką jest potrzebny układ wykrywania przejścia przez zero. Optotriak musi być zwykły, a sterowanie jasności żarówki to tak zwane sterowanie fazowe. Mam nadzieję, że rysunek wszystko wyjaśnia, ta sinusoida to prąd sieciowy.
http://www.toolsfactory.pl/i/sklep/ssr/ssr04.gif

Portret użytkownika mirley

Re: PWM

PWM do żarówki 230V AC się nie nadaje.... zawsze będzie migać. bo trafiasz w rózne punkty na sinusoidzie. Możesz jeszcze spróbować optotriaka bez włączenia w zerze. Wdaje mi się że TYLKO regulator fazowy zda egzamin w tym miejscu.

Z tym silnikiem to prawdopodobnie za duża częstotliwość sygnału i sterownik sobie nie radzi. Z tego co czytam to 5KHz jest max a PWM napewno może przynajmniej 2 razy tyle działać. Zmierz albo policz co na wyjściu masz dokładnie i co się dzieje z przebiegiem na silniku

-

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 demsy1

PWM

Witam
Chciałbym uzyska efekt wygaszania led po naciśnięciu przycisku, ale nie wiem co dopisać w pętli
Pomoże mi ktoś?

$regfile = "attiny13.dat"
$crystal = 8000000
$hwstack = 8
$swstack = 8
$framesize = 8
 
Config Pinb.0 = Input
Portb.0 = 1
Klawisz Alias Pinb.0
Dim I As Byte
 
Config Pinb.0 = Output
 
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down
 
Enable Interrupts
 
Do
 
 For I = 0 To 255
      Pwm0a = I
      Waitms 2
   Next I
Loop

Portret użytkownika mirley

Re: PWM

Najprościej to chyba tak:

Do
 if pinx.y = 0 then
   For I = 0 To 255
      Pwm0a = I
      Waitms 2
   Next I
 end if
 waitms 100
Loop

Program będzie czekał tyko na przyciśnięcie przycisku a potem zacznie ściemniać lub rozjaśniać. Wartość początkową przypisz przed do loop. Rozwiązanie ne jest eleganckie bo ma waity ale powinno zadziałac

-

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 demsy1

PWM

Nie działa mi ten kod

$regfile = "attiny13.dat"
$crystal = 8000000
Ddrb = &B11110111 : Portb = &B00011000
 
$hwstack = 8
$swstack = 8
$framesize = 8
 
Klawisz Alias Pinb.3
Dim I As Byte
 
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 8
 
Enable Interrupts
 
Portb.4 = 1
Do
 
If Klawisz = 0 Then
Waitms 20
If Klawisz = 0 Then
 
For I = 0 To 255
      Pwm0a = I
      Waitms 2
   Next I
 End If
 End If
 waitms 100
 
   Loop

Portret użytkownika mirley

Re: PWM

A jak nie masz nic w do loop i przypiszesz na początku Pwm0a = 0 a innym razem Pwm0a = 100 to sam PWM w ogóle działa?

-

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 demsy1

PWM

Nie działało bo diodę podłączyłem pod PB4, ale zmieniłem już na PB0

$regfile = "attiny13.dat"
$crystal = 8000000
Ddrb = &B11110111 : Portb = &B00011001
 
$hwstack = 8
$swstack = 8
$framesize = 8
 
Klawisz Alias Pinb.3
Dim I As Byte
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
 
Enable Interrupts
 
Do
Pwm0a = 255
If Klawisz = 0 Then
Waitms 20
If Klawisz = 0 Then
Pwm0a = 0
  Wait 10
For I = 0 To 255
     Pwm0a = I
     Waitms 20
  Next I
 
End If
End If
  Loop

Naciskam klawisz zapala się dioda świeci 10 sekund i powoli wygasa, a teraz chciałbym dodać ADC żeby swiecenie tej diody mozna było ustawiac potencjometrem

Portret użytkownika mirley

Re: PWM

No tootwierasz helpa do bascoma, szukasz config ADC i tam jest wszystko napisane, tylko wkleić linijkę z konfiguracją, ustawić referencję na AVCC żeby było 5V i podłączyć potencjometr między zasilanie a masę, suwakiem do adc. Wejście przetwornika powinno być zadeklarowane jako X czyli floating (wiszące)

-

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 demsy1

PWM

Może z ADC jeszcze się wstrzymam. Pomyślałem że lepiej będzie jak nacisnę przycisk i będę go trzymał to dioda będzie świeciła, a jak puszcze to zgaśnie razem z opcją PWM. Tylko co wstawić zamiast?

If Klawisz = 0 Then
Waitms 20
If Klawisz = 0 Then

Portret użytkownika mirley

Re: PWM

Wstaw Else do tego ifa w którym ustawisz wartość PWM dla trzymania i daj sprawdzanie stanu 1 a nie 0. Jak trzymasz to będzie 0 i będzie cały czas stałą wartość a jak puścisz to będzie się zmieniac

-

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 demsy1

PWM

If Klawisz = 0 Then
Else Pwm0a = 255
Waitms 20
If Klawisz = 1 Then

Portret użytkownika mirley

Re: PWM

Raczej tak, to co napisałeś wyżej raczej wygeneruje bład:

If Klawisz = 1 Then
  Waitms 20
  If Klawisz = 1 Then
    For I = 0 To 255
     Pwm0a = I
     Waitms 20
    Next I
  End If
else
 Pwm0a = 0
End If

Spróbuj tak i na przyszłość stosuj wcięcia w programie bo nie idzie go potem zanalizować

-

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 djerzyk

PWM na Attiny 25

Witam, podłącze się pod temat.
Czy próbował może ktoś skonfigurować ten procesor żeby poprawnie działał PWM. Bo ja kiedyś próbowałem i skończyło się na zastosowaniu 2313.
Jeśli komuś się udało to prosił bym o wskazówkę.
Dzięki.

Portret użytkownika demsy1

ADC

Znalazłem coś takiego na temat config ADC

Config Adc = Single , Prescaler = Auto
 
 
Start Adc
 
 
Dim W As Word , Channel As Byte
 
 
Channel = 0
 
 
Do
 
 W = Getadc(channel)
 
Print "Channel " ; Channel ; " value " ; W
 
Incr Channel
 
If Channel > 7 Then Channel = 0
 
Loop
 
End

Bo chciałbym sterować czasem świecenia diody za pomocą potencjometra, ale nie bardzo rozmuniem tago configa ADC

Portret użytkownika mirley

Re: ADC

Jak to nie rozumiesz. Konfigurujesz ADC na początku i uruchamiasz:

Config Adc = Single , Prescaler = Auto
Start Adc

W momencie kiedy wydasz polecenie:

W = Getadc(channel)

do zmiennej W zostanie wpisany wynik konwersji z kanału channel (0-7)

-

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 demsy1

W = Getadc(0)a dalej jak

W = Getadc(0)

a dalej jak odczytać wartość z ADC i zamienić ją tak żeby odliczała czas?
For X = 1 To 200
Waitms 300
Next X

Portret użytkownika matrix

Re: W = Getadc(0)a dalej jak

Pobierając wartość z wejścia ADC dostaniesz liczbę z zakresu 0-1023. Resztę musisz sam sobie obliczyć w zależności od tego co chcesz uzyskać?

Dalej powinieneś uruchomić timer i liczbę ADC zamienić na odpowiednią wartość dla timera a ten odliczy Ci zadany czas.

Tudzież zmienna pobrana z ADC może się zmniejszać co przerwanie timera. Konfiguracji jest masa. Liczy się pomysłowość i to co chcesz uzyskać.

Myśl, myślenie ma przyszłość.

Portret użytkownika mirley

Re: timer

Najprościej będzie skonfigurowac timer aby przerwanie wystepowało co najmniejszy odcinek czasu jak potrzebujesz, chyba że to długie czasy to wtedy będzie trzeba jeszcze na zmiennej podzielić. Potem tylko wywstarczy policzyć W impulsów i ustawic jakąś zmienną flagę na 1, która w pętli głównej będzie wykryta i wykona jakis fragment kodu.

Napisz jakis fragment to będzie można popatrzeć i zmodyfikowac

-

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 demsy1

Kod

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
Dim X As Byte
Dim Y As Byte
Dim W As Word , Channel As Byte
 
Config Adc = Single , Prescaler = Auto
Start Adc
 
Do
W = Getadc(0)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
      For Y = 1 To 200
      Waitms 200
      Next Y
 
     For X = 7 To 0
        Portb.x = 1
        Waitms 300
     Next X
 
 
     Loop
End If
End If

Portret użytkownika matrix

Re: kod

W tym fragmencie

For X = 7 To 0
        Portb.x = 1
        Waitms 300
     Next X

na ten przykład czegoś brak. Brak jest dyrektywy która każe liczyć o 7 do 0 czyli brak

step -1

i powinno wyglądać to tak:
W końcowym fragmencie przestaw loop za oba end if.
     For X = 7 To 0 step -1
        Portb.x = 1
        Waitms 300
     Next X

Na końcu przestaw loop za oba end if

Portret użytkownika demsy1

Poprawiony kod

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
Dim X As Byte
Dim Y As Byte
Dim W As Word , Channel As Byte
 
Config Adc = Single , Prescaler = Auto
Start Adc
 
Do
W = Getadc(0)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
      For Y = 1 To 200
      Waitms 200
      Next Y
 
     For X = 7 To 0 Step -1
        Portb.x = 1
        Waitms 300
     Next X
 
     End If
        End If
 Loop

Portret użytkownika mirley

Re: For

jak jest pęla for i zmiana nastepuje co 1 to nie trzeba step.

Moze to być:

for x = 0 to 7
.....
next x

lub

for x = 7 downto 0
.....
next x

-

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 demsy1

ok, a co z odczytem ADC?

ok, a co z odczytem ADC?

Portret użytkownika mirley

Re: ADC

Adc odczytywane jest raczej ok. W które miejsce teraz chcesz włozyć ustawianie parametru. Ustawianie czasu, tego 300ms czy może coś innego.

-

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 demsy1

tu gdzie jest zmienna Y

tu gdzie jest zmienna Y tym chce sterować przez potencjiometr

Portret użytkownika mirley

Re: Sterownie

No to użyj tego :

 For Y = 1 To W
      Waitms 200
      Next Y

teraz będziesz miał czekanie od 200ms do 1023*200ms w zależności od wyniku ADC

-

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 gosc

Wcześniej kolega Mirek pisał

Wcześniej kolega Mirek pisał żeby ustawić referencję na AVCC żeby było 5V i podłączyć potencjometr między zasilanie a masę, suwakiem do adc. O co chodzi z tym ustawieniem?

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
Dim X As Byte
Dim Y As Byte
Dim W As Word , Channel As Byte
 
Config Adc = Single , Prescaler = Auto
Start Adc
 
Do
W = Getadc(0)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
      For Y = 1 To W
      Waitms 200
      Next Y
 
     For X = 7 To 0 Step -1
        Portb.x = 1
        Waitms 300
     Next X
 
     End If
        End If
 Loop

Portret użytkownika matrix

Re: O co chodzi z tym ustawieniem?

Ta część kodu zamiast tak:

Config Adc = Single , Prescaler = Auto
Start Adc

ma wyglądać tak:
Config Adc = Single , Prescaler = Auto, reference = avcc
Start Adc

Portret użytkownika gosc

Mostkujemy AVCC z VCC?

Mostkujemy AVCC z VCC?

Portret użytkownika matrix

Re: Mostkujemy AVCC z VCC?

Nie do końca łączymy, ale w prostych konstrukcjach można przyjąć takie rozwiązanie.

To co poniżej już jest bardzo dobrym rozwiązaniem:

Portret użytkownika gosc

Witam serdecznie Chciałbym

Witam serdecznie
Chciałbym sie dowiedzieć jak skonfigurować PWM sprzetowe tak zeby działała na całym porcie B od 0 do 7?

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
Dim X As Byte
Dim Y As Byte
Dim W As Word , Channel As Byte
 
Config Adc = Single , Prescaler = Auto
Start Adc
 
Do
W = Getadc(0)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
      For Y = 1 To W
      Waitms 200
      Next Y
 
     For X = 7 To 0 Step -1
        Portb.x = 1
        Waitms 300
     Next X
 
     End If
        End If
 Loop

Portret użytkownika mirley

Re: PWM

Nie da się zrobić tyle PWM sprzętowych. Masz określone piny procka na których jest wyjście i tyle. Programowo możesz sobie zrobić na dowolnych pinach

-

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 gosc

Chodziło mi właśnie o PWM

Chodziło mi właśnie o PWM programowe nie sprzętowe pomyliłem się w poście wyżej. PWM sprzętowe wiem jak wygląda.

Portret użytkownika mirley

Re; PWM

Przeczytaj w dziale kody źródłowe informacje na temat programowego PWM i po prostu wstaw to do programu

-

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 gosc

Coś takiego? $regfile =

Coś takiego?

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11111111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
Dim Licznik As Byte
Dim X As Byte
Dim Y As Byte
Dim W As Word , Channel As Byte
 
Config Adc = Single , Prescaler = Auto
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
Start Adc
 
Do
W = Getadc(0)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
      For Y = 1 To W
      Waitms 200
      Next Y
 
     For X = 7 To 0 Step -1
        Portb.x = 1
        Waitms 300
     Next X
 
     End If
        End If
 Loop
 
 Prztimer0:
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik = X Then Set
Return

Portret użytkownika mirley

Re: PWM

cos takiego:

Prztimer0:
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik < Pwm(1) Then set portb.0 else reset portb.0
 If Licznik < Pwm(2) Then set portb.1 else reset portb.1
 If Licznik < Pwm(3) Then set portb.2 else reset portb.2
 'itd
Return

Tablica zmiennych Pwm(1), Pwm(2) itd przechowuje wypełnienia poszczególnych kanałów. Jak Pwm(1) = 40 to masz 40% wypełnienia na portb.0 itd. Częstotliwość przebiegów dostrajasz timerem tak aby przerwanie było 100x szybsze niż częstotliwość przebiegu jaką chcesz uzyskać

-

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 gosc

Nie można w jakiś sposób

Nie można w jakiś sposób zrobić tak żeby zamiast
pisać poszczególne piny wstawić od razy zmienną X?

Portret użytkownika mirley

RE: PWM

Może nie rozumiem w dalszym ciągu co chcesz zrobić? Wszystkie piny na porcie b mają reagować tak samo?

-

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 gosc

wszystkie piny na porcie b

wszystkie piny na porcie b mają reagować tak samo czyli rozjasniać się.

Portret użytkownika mirley

Re: PWM

no to:

Prztimer0:
 Incr Licznik
 If Licznik = 100 Then Licznik = 0
 
 If Licznik < X Then set portb else reset portb
Return

-

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 maro

Witam

Witam serdecznie
Poszukuje kodu do obsługi ADC i widziałem wyżej że kolega demsy próbował i ja też próbowałem ale bez skutku, potencjomet nie reaguje, Zapala się 8 diód kolejno i kolejno gasną od razu, a chciałbym sterować czasem pomiędzy świeceniem a gaśnięciem tych diód czyli zmienną Y

$regfile = "m8def.dat"
$crystal = 8000000
 
 
Ddrb = &B11011111 : Portb = &B00000000
Ddrc = &B11111111 : Portc = &B00000000
Ddrd = &B11111110 : Portd = &B00000001
 
Dim X As Byte
Dim Y As Byte
Dim W As Word 
 
Config Adc = Single , Prescaler = Auto, reference = avcc
Start Adc
 
Do
W = Getadc(5)
 
 
If Pind.0 = 0 Then
  Waitms 20
If Pind.0 = 0 Then
 
    For X = 0 To 7
        Portb.x = 0
           Waitms 300
       Next X
 
                    For Y = 1 To W
                     Waitms 200
                     Next Y
 
     For X = 7 To 0 Step -1
        Portb.x = 1
        Waitms 300
     Next X
 
     End If
        End If
 Loop

Portret użytkownika mirley

Re: ADC

Jak chcesz używać adc jak wszystkie piny portu C masz wyjściami i jeszcze zwarte do 0.

może być np tak:

Ddrc = &B11011111 : Portc = &B00X00000

-

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 maro

Poprawiłem kod i działa

Poprawiłem kod i działa

Portret użytkownika maro

PWM

Witam serdecznie
Chciałbym do kodu niżej dodać Pwm0b żeby działał tak samo jak Pwm0a, ale nie wiem jak do końca to napisać?

$regfile = "attiny13.dat"
$crystal = 8000000
Ddrb = &B11110111 : Portb = &B00011001
 
$hwstack = 8
$swstack = 8
$framesize = 8
 
Klawisz Alias Pinb.3
Dim I As Byte
 
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
 
Enable Interrupts
 
Do
Pwm0a = 255
If Klawisz = 0 Then
Waitms 20
If Klawisz = 0 Then
Pwm0a = 0
  Wait 10
For I = 0 To 255
     Pwm0a = I
     Waitms 20
  Next I
 
End If
End If
  Loop

Portret użytkownika mirley

Re: Pwm

ma działać tak samo czy ma być drugi kanał na drugim klawiszu?

Pod spodem przed loop dodaj drugi taki sam fragment kodu:

Pwm0b = 255
If Klawisz = 0 Then
Waitms 20
If Klawisz = 0 Then
Pwm0b = 0
  Wait 10
For I = 0 To 255
     Pwm0b = I
     Waitms 20
  Next I
 
End If
End If

Zamiast klawisz możesz dac np klawisz2 od drugiego przycisku. Jeśli po kliknięciujdnego przycisku program będzie czekał na tym wait 10 to wiadomo że drugi przycisk nie zadziała. Program jest napisany na waitach zamiast na timerze i będzie źle działał w takiej sytuacji

-

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 maro

Chciałem żeby Pwm0a i Pwm0b

Chciałem żeby Pwm0a i Pwm0b działały tak samo, ale moze rozwiąże to inaczej stosując jeden tranzystor NPN i do tego 2 mosfety tylko nie wiem jak wysterować mosfeta P.
Jak można ten Pwm0b jeszcze inaczej napisać?
tak może być?

If I < 255 Then Incr I
 
Pwm0a = I