Skocz do zawartości

[Kurs] BASCOM - lekcja3 - zaczynamy programować


Pomocna odpowiedź

  • 2 tygodnie później...

Treker no nie sadze ja juz rozkminilem bascoma i zrobilem magiczna kóle z edw tylko,ze zamiast 20 diod dalem 1 diode w kazdym pinie i wszystko dziala jak zechce po zmianie kodu a Ikara kurs do dzis mi nie dziala a magiczna kola jest o wiele trudniejszym projektem jezeli chodzi o sam kod.

hehe kule widziałem. Całkiem fajna.

Mógłby mi ktoś powiedzieć jak zrobić pętle skończoną. Wiem, że można z powodzeniem użyć while, ale średnio mi się podoba to rozwiązanie. Chodzi o wykonanie zadania x 255 razy.

Nie wiem czy o to chodzi:

Do
Incr A
If A = 255 Then
cośtam = 1
End If

Można też zrobić tak (nie wiem czy będzie dobrze):

Do
Incr A
Loop Until A = 255
Do
Port b jeden = 1
Loop

misiek1994, fajnie, że znasz jedną komendę w asm i się tym chwalisz 🙂

Nie prościej użyć:

Do
  Blok instrukcji B wykonywany gdy Warunek jest fałszywy
Loop Until (Warunek)

lub

Do
  Blok instrukcji B wykonywany gdy Warunek jest prawdziwy
Loop While (Warunek)

No niezłe pomysły, nigdy bym nie pomyślał że można aż tak usiłować sobie życie utrudnić 😋

A z tym asemblerem to już istny kwiatuszek, tak jak by nie było w bascomie takich instrukcji jak gosub i goto.

Ja proponuję użyć do tego funkcji która została niejako do tego stworzona czyli ’for’:

Dim A As Byte

For A = 1 To 256

'tutaj to co się ma wykonać te 255 razy

Next A

Na przyszłość sugeruję zaglądać do helpa, a dla leniwych polskiego helpa napisanego przez Zbigniewa Gibka.

Ja mam takie pytanie:

Jak napisać obsługę przycisku żeby uzyskać taki efekt:

Nie naciskam przycisku - dioda nie świeci

Naciskam przycisk - dioda świeci

Puszczam przycisk - dioda nadal świeci

Naciskam 2 raz - dioda gaśnie

Pytanie może banalne ale uczę się BASCOM'U od 3 godzin 😉

Witam

Wykonałem układ z pierwszego postu ale mam dziwny problem. Diody ładnie sobie świecą i robią co im każę. Problem jest z przyciskiem. Jeśli obsługuje go jako wejście (pin skonfigurowany jako wejście) to zachowuje się tak jakby cały czas był włączony (jak dotykam palcami styków uC to zaczyna działać tak jak trzeba). Gdy przycisk obsługuje jako wyjście to nie ma problemu (chociaż jeśli przycisk jest na tym samym porcie co diody to diody nie dostają wtedy za dużo prądu i słabo świecą ale przycisk działa tak jak powinien). Przycisk jako wejście na innym porcie niż diody zachowuje się tak samo, co ciekawsze bez żadnego przycisku na pinach tak się one zachowują! Nie pomaga włączanie wewnętrznego podciągania (chociaż nie wiem czy to dobry pomysł w tej sytuacji - dopiero się uczę). Układ zasilam zasilaczem AT od PC (oczywiście 5V). Kondensator 100uF dałem przy samym uC, wszystko na płytce uniwersalnej DIP24, musiałem dodać kilka przewodów aby przeciągnąć + i - do uC.

Można to jakoś naprawić żeby działało tak jak powinno ?

  • 3 tygodnie później...

napisalem cos takiego:

$regfile = "m16def.dat" 
$crystal = 8000000

Config Portc = Input
Porta = &B00000000

Config Portd = Output
Portd = &B00000000


Do
If Pinc.0 = 1 Then Portd.4 = 1 End If
If Pinc.3 = 1 Then Portd.6 = 1 End If
If Pinc.3 = 1 And Pinc.0 = 1 Then Portd.4 = 1 And Portd.6 = 1 End If
If Pinc.1 = 1 Then Portd.5 = 1 End If
If Pinc.2 = 1 Then Portd.7 = 1 End If
If Pinc.2 = 1 And Pinc.3 = 1 Then Portd.5 = 1 And Portd.7 = 1 End If
If Pinc.0 = 1 And Pinc.3 = 1 Then Portd.4 = 1 And Portd.7 = 1 End If
If Pinc.1 = 1 And Pinc.3 = 1 Then Portd.5 = 1 And Portd.6 = 1 End If
If Pinc.0 = 1 And Pinc.1 = 1 Then Portd.2 = 1 End If
If Pinc.2 = 1 And Pinc.3 = 1 Then Portd.3 = 1 End If
If Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 1 Then Portd.0 = 1 End If
If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 1 Then Portd.1 = 1 End If
Loop

End

i moze mi ktos bardziej rozgarniety niz ja powiedziec co jest zle, ze nawet skompilowac nie moge??

Tak, And jest operatorem logicznym, czy jak to się tam nazywa... może występowac tylko w warunkach, a nie w operacjach które maja zostać wykonane w wypadu spełnienia jakiegoś warunku 😉

   $regfile = "m16def.dat" 
   $crystal = 8000000

   Config Portc = Input
   Porta = &B00000000

   Config Portd = Output
   Portd = &B00000000


   Do
    If Pinc.0 = 1 Then
     Portd.4 = 1
    End If

    If Pinc.3 = 1 Then
     Portd.6 = 1
    End If

    If Pinc.3 = 1 And Pinc.0 = 1 Then
     Portd.4 = 1
     Portd.6 = 1
    End If

    If Pinc.1 = 1 Then
     Portd.5 = 1
    End If

    If Pinc.2 = 1 Then
     Portd.7 = 1
    End If

    If Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.5 = 1
     Portd.7 = 1
    End If

    If Pinc.0 = 1 And Pinc.3 = 1 Then
     Portd.4 = 1
     Portd.7 = 1
    End If

    If Pinc.1 = 1 And Pinc.3 = 1 Then
     Portd.5 = 1
     Portd.6 = 1
    End If

    If Pinc.0 = 1 And Pinc.1 = 1 Then
     Portd.2 = 1
    End If

    If Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.3 = 1
    End If

    If Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.0 = 1
    End If

    If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 1 Then
     Portd.1 = 1
    End If
   Loop

   End

To się kompiluje bez najmniejszego problemu;)

dzieki 🙂 teraz bede wiedzial 🙂

i lipa tamto nadal nie chodzi. wkurzylem sie i wpisalem taki kod:

$regfile = "m16def.dat" 
$crystal = 8000000

Config Porta = Input
Porta = &B00000000

Config Portd = Output
Portd = &B00000000



do                                         'pętla nieskończona

  If Pina.0 = 1 Then                                       'jeżeli przycisk 1 wciśnięty
  portd.0=1                                'zapal diode
  Elseif Pina.1 = 1 Then                                   'jeżeli przycisk 2 wciśnięty
  portd.0=0                                'zgaś diodę
  endif                                    'koniec bloku warunkowego

loop                                       'koniec pętli

End

wyglada na to, ze sie dobrze programuje, ale na koncu wyskakuje komunikat difference at 00000 i procek martwy;/ zasilanie sprawdzalem jest rowne 5v. i teraz to ja juz nic nie wiem;/;/;/ prosze o pomoc

[ Dodano: 02 Lut 09 09:44 ]

juz wszystko lata. musialem zastosowac logike odwrotna. czyli tam gdzie jedynki dac zera, a tam gdzie zera jedynki....

a i napisalem kod stosujac takie formulki:

If Porta = &B00001001 Then Portd = &B00000001 end if

to tylko przyklad do pokazania o co chodzi:) i procek smiga, az milo. wiec spokojnie mozna pisac tak program, co w moim przypadku bardzo skraca i upraszcza kod...

  • 1 miesiąc później...

A ja mam takie pytanko - mam ten programik - BASCOM AVR tylko że chciałbym zaprogramować atmege8 której nie mam w spisie, więc jak ją dodać jeżeli chcę właśnie ten procek programować?

Musisz chyba poszukać biblioteki odpowiedniej dla tego mikroprocesora. Spróbuj poszukać coś na stornie producenta. Mam napisany samodzielnie taki kod i proszę o jego poprawę.

$regfile = "attiny2313.dat" 
$crystal = 1000000


config portd=input
     portd=&B11111111
config portb=output
     portb=&B11111111
do
     wait	4	
     sound portb.1, 	6	18
     wait	15	
     sound portb.1, 	7	20
     wait	36	
     sound portb.1, 	3	10
wait	41	
sound portb.1, 	7	16
wait	38	
sound portb.1, 	7	7
wait	2	
sound portb.1, 	1	12
loop

end

Dodam jeszcze, co powinien robić- powinien wywoływać buczenie w niskiej częstotliwości (15-40 kHz) tak, by odstraszał kuny i im podobne kreatury.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...