Witam
Moja Atmega 16 wiesza się w pętlach Uszczenianie i Paletyzacja poniższego programu:
Czy ktoś może ma pomysł dlaczego?
Schemat podłączenia:
Fuse bity:
Proszę o pomoc
Moja Atmega 16 wiesza się w pętlach Uszczenianie i Paletyzacja poniższego programu:
'Listing programu obsługującego symulator procesów. Program został napisany
' i skompilowan w programie BASCOM-AVR 1.11.9.8.
$regfile = "m16def.dat" 'określenie typu procesora
$crystal = 8000000 'określene szybkości zegara
'Watchdog
Wdtcr = &B00011111 'konfiguracja watchdoga na 2,2 sekundy
Kontraktron Alias Portb 'porty kotraktonów
Dioda Alias Portd 'porty diod
P_lewo Alias Pina.7 'przycisk strzalka w lewo
P_prawo Alias Pina.6 'przycisk Menu
P_menu Alias Pina.5 'przycisk strzalka w prawo
A Alias Pinb.0
B Alias Pinb.1
C Alias Pinb.2
D Alias Pinb.3
E Alias Pinb.4
F Alias Pinb.5
G Alias Pinb.6
H Alias Pinb.7
Dioda_a Alias Portd.0
Dioda_b Alias Portd.1
Dioda_c Alias Portd.2
Dioda_d Alias Portd.3
Dioda_e Alias Portd.4
Dioda_f Alias Portd.5
Dioda_g Alias Portd.6
Dioda_h Alias Portd.7
Narzedzie Alias Pina.4
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Kontraktron = Input 'port b jako wejścia
Kontraktron = &B11111111 'wszędzie stan spoczynkowy-1
Config Dioda = Output 'port d jako wyjścia
Dioda = &B00000000 'wszędzie stan spoczynkowy-0
Config Porta.7 = Input 'przycisk strzalka w lewo
Porta.7 = 1
Config Porta.6 = Input 'przycisk OK
Porta.6 = 1
Config Porta.5 = Input 'przycisk strzalka w prawo
Porta.5 = 1
Config Porta.4 = Input 'wejscie podlaczane do robota, stan narzędzia
Porta.4 = 1
Config Timer0 = Timer , Prescale = 1024 'obsługa wyświetlacza LCD - wyświelanie i przesówanie
On Timer0 Liczenie
Enable Timer0
Config Timer1 = Timer , Prescale = 1
On Timer1 Czasomierz_1000
Enable Timer1
Enable Interrupts
Dim Licznik_menu As Byte , Test_licznik_menu As Byte , Zatwierdz As Bit , Dlugi_tekst As String * 80
Dim Dlugi_tekst_2 As String * 80 , Wyswietlany_tekst As String * 16
Dim Wyswietlany_tekst_2 As String * 16 , Licznik_lcd As Byte , Licznik_lcd_2 As Byte
Dim Ilosc_liter As Byte , Ilosc_liter_2 As Byte
Dim Czas_przypawania As Byte , Licznik_timer0 As Integer , Predkosc_spawania As Word
Dim Czas_odcinka As Long ,
Dim 1_1000_sekundy As Long , Minus_czas As Long , Plus_czas As Long , Tolerancja_czasu As Long
Dim Tolerancja_czasu_przypawania As Long
Dim Flaga_start As Bit
Dim Flaga_a As Bit , Flaga_b As Bit , Flaga_c As Bit , Flaga_d As Bit ,
Dim Flaga_e As Bit , Flaga_f As Bit , Flaga_g As Bit , Flaga_h As Bit
Licznik_menu = 1
Licznik_lcd = 1
Licznik_lcd_2 = 1
Czas_przypawania = 30
Licznik_timer0 = 0
Predkosc_spawania = 1 'mm/s
Tolerancja_czasu_przypawania = 20 ' wartość mniejsza od wartości Czas_przypawania
Flaga_start = 0
Dlugi_tekst = "WIM Labolatorium"
Dlugi_tekst_2 = " robotyki "
Wait 1
Reset Watchdog
Wait 1
Reset Watchdog
Wait 1
Reset Watchdog
Dlugi_tekst = " Symulator "
Dlugi_tekst_2 = " interaktywny "
Wait 1
Reset Watchdog
Wait 1
Reset Watchdog
Wait 1
Reset Watchdog
Flaga_a = 0
Gosub Wybor
Wybor:
Dlugi_tekst_2 = " By wybrac symulacje wcisnij OK, by zmienic wcisnij < lub > "
Do
Waitms 100
If P_lewo = 0 Then
Waitms 100
Do
Reset Watchdog
Test_licznik_menu = Licznik_menu
Decr Licznik_menu
If Licznik_menu = 255 Then
Licznik_menu = 2
Licznik_lcd = 0
Loop Until Licznik_menu <> Test_licznik_menu
End If
End If
If P_menu = 0 Then
Waitms 100
Zatwierdz = 1
Else
Zatwierdz = 0
End If
If P_prawo = 0 Then
Waitms 100
Do
Reset Watchdog
Test_licznik_menu = Licznik_menu
Incr Licznik_menu
If Licznik_menu => 3 Then
Licznik_menu = 0
Licznik_lcd = 0
End If
Loop Until Licznik_menu <> Test_licznik_menu
End If
If Licznik_menu = 0 Then
Dlugi_tekst = " Symulacja paletyzacji "
If Zatwierdz = 1 Then
Waitms 30
Gosub Paletyzacja
End If
End If
If Licznik_menu = 1 Then
Dlugi_tekst = " Symulacja nakladania uszczelnienia "
If Zatwierdz = 1 Then
Waitms 30
Gosub Uszczelnianie
End If
End If
If Licznik_menu = 2 Then
Dlugi_tekst = " Symulacja przypawania "
If Zatwierdz = 1 Then
Waitms 30
Gosub Przypawanie
End If
End If
Reset Watchdog
Loop
Paletyzacja:
Dlugi_tekst_2 = " By powrocic do menu glownego wcisnij < "
Do
Reset Watchdog
If A = 0 Then
Waitms 50
Dioda_a = 1
Else
Dioda_a = 0
End If
If B = 0 Then
Waitms 50
Dioda_b = 1
Else
Dioda_b = 0
End If
If C = 0 Then
Waitms 50
Dioda_c = 1
Else
Dioda_c = 0
End If
If D = 0 Then
Waitms 50
Dioda_d = 1
Else
Dioda_d = 0
End If
If Dioda_a = 1 And Dioda_b = 1 And Dioda_c = 1 And Dioda_d = 1 Then
Wait 1
Reset Watchdog
If Flaga_a = 0 Then
Licznik_lcd = 1
Dlugi_tekst = " Sukces, zaladuj ponownie podajnik i wezwij prowadzacego"
End If
Flaga_a = 1
Else
Flaga_a = 0
Licznik_lcd = 1
Dlugi_tekst = " Symulacja paletyzacji"
End If
If P_lewo = 0 Then
Waitms 100
Dioda = 0
Gosub Wybor
End If
'Gosub Powrot_do_menu
Loop
Uszczelnianie:
Waitms 50
Licznik_lcd = 1
Licznik_lcd_2 = 1
Dlugi_tekst = " Symulacja nakladania uszczelnienia"
Dlugi_tekst_2 = " By powrocic do menu glownego wcisnij <. By rozpoczac od nowa wcisnij OK"
Do
Flaga_a = 1
Flaga_b = 1
Flaga_c = 1
Flaga_d = 1
Flaga_e = 1
Flaga_f = 1
Flaga_g = 1
Flaga_h = 1
Reset Watchdog
If A = 0 And Narzedzie = 0 Then
Do
Reset Watchdog
Dlugi_tekst = " Symulacja nakladania uszczelnienia"
Dioda_a = 1
Czas_odcinka = 142000 / Predkosc_spawania 'interpolacja kołowa przez punkty ABC
1_1000_sekundy = 0
Flaga_a = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If B = 0 And Narzedzie = 0 And Flaga_a = 0 Then
Do
Reset Watchdog
Dioda_b = 1
Czas_odcinka = 84400 / Predkosc_spawania 'interpolacja kołowa przez punkty ABC
1_1000_sekundy = 0
Flaga_b = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If C = 0 And Narzedzie = 0 And Flaga_b = 0 Then
Do
Reset Watchdog
Dioda_c = 1
Czas_odcinka = 120000 / Predkosc_spawania 'interpolacja liniowa
1_1000_sekundy = 0
Flaga_c = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If D = 0 And Narzedzie = 0 And Flaga_c = 0 Then
Do
Reset Watchdog
Dioda_d = 1
Czas_odcinka = 150000 / Predkosc_spawania 'interpolacja liniowa
1_1000_sekundy = 0
Flaga_d = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If E = 0 And Narzedzie = 0 And Flaga_d = 0 Then
Do
Reset Watchdog
Dioda_e = 1
Czas_odcinka = 300000 / Predkosc_spawania 'interpolacja liniowa
1_1000_sekundy = 0
Flaga_e = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If F = 0 And Narzedzie = 0 And Flaga_e = 0 Then
Do
Reset Watchdog
Dioda_f = 1
Czas_odcinka = 162000 / Predkosc_spawania 'interpolacja liniowa
1_1000_sekundy = 0
Flaga_f = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If G = 0 And Narzedzie = 0 And Flaga_f = 0 Then
Do
Reset Watchdog
Dioda_g = 1
Czas_odcinka = 115000 / Predkosc_spawania 'interpolacja liniowa
1_1000_sekundy = 0
Flaga_g = 0
Loop Until 1_1000_sekundy >= Czas_odcinka
End If
If H = 0 And Narzedzie = 0 And Flaga_g = 0 Then
Do
Reset Watchdog
Dioda_h = 1
If Narzedzie = 0 Then
Wait 2
Dioda = 0
Dlugi_tekst = " Narzedzie nalezy wylaczyc w punkcie H, popraw program i ponow probe"
End If
If Narzedzie = 1 And Portd = 255 Then
Dlugi_tekst = " Sukces, wezwij prowadzacego"
End If
If P_menu = 0 Then
Waitms 100
Dioda = 0
Gosub Uszczelnianie
End If
Gosub Powrot_do_menu
Loop
End If
If Dioda > 0 Then
Dlugi_tekst = " Niepoprawna predkosc,zla trasa lub wylaczenie narzedzia w trakcie uszczelniania"
Wait 10
Dlugi_tekst = " Popraw program i ponow probe"
Wait 10
Dlugi_tekst = " Symulacja nakladania uszczelnienia"
Dioda = 0
End If
If Narzedzie = 0 Then
Dlugi_tekst = " Narzedzie mozna wlaczyc gdy pokonuje trase uszczelniania, ponow probe"
End If
If P_menu = 0 Then
Waitms 100
Dioda = 0
Gosub Uszczelnianie
End If
Gosub Powrot_do_menu
Loop
Przypawanie:
Do
Loop
Liczenie:
Incr Licznik_timer0
If Licznik_timer0 >= 15 Then
Ilosc_liter = Len(dlugi_tekst) - 14
Ilosc_liter_2 = Len(dlugi_tekst_2) - 14
Incr Licznik_lcd '= Licznik_lcd + 6
Incr Licznik_lcd_2 ' = Licznik_lcd_2 + 6
If Licznik_lcd >= Ilosc_liter Then
Licznik_timer0 = -30
Licznik_lcd = 1
End If
If Licznik_lcd_2 >= Ilosc_liter_2 Then
Licznik_timer0 = -30
Licznik_lcd_2 = 1
End If
Licznik_timer0 = 0
Gosub Wyswietl
End If
Return
Wyswietl:
Cls
Wyswietlany_tekst = Mid(dlugi_tekst , Licznik_lcd , 16)
Locate 1 , 1
Lcd Wyswietlany_tekst
Wyswietlany_tekst_2 = Mid(dlugi_tekst_2 , Licznik_lcd_2 , 16)
Locate 2 , 1
Lcd Wyswietlany_tekst_2
Return
Powrot_do_menu:
If P_lewo = 0 Then
Waitms 100
Dioda = 0
Gosub Wybor
End If
Return
Od_nowa_przypawanie:
If P_menu = 0 Then
Waitms 100
Dioda = 0
Gosub Przypawanie
End If
Return
Czasomierz_1000:
Incr 1_1000_sekundy
Timer1 = 57535
Return
Od_nowa_uszczelnianie:
If P_menu = 0 Then
Waitms 100
Dioda = 0
Gosub Uszczelnianie
End If
Return
Czy ktoś może ma pomysł dlaczego?
Schemat podłączenia:
Fuse bity:
Proszę o pomoc
