Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 lis 2024, o 23:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 24 sie 2014, o 15:04 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 09 sie 2014
Posty: 6
Lokalizacja: Koszalin
Pomógł: 0

Witam
Piszę, bo mam lekki mętlik w głowie. Proszę mnie poprawić jeśli się mylę. Wydaje mi się że jeden cykl zegarowy w procesorach ATMega wygląda tak:
Kod:
|-----|     |
|     |     |
|     |-----|

<--1 cykl -->


dla zobrazowania sobie tego na oscyloskopie napisałem wstawkę w assemblerze:
Kod:
#include <avr/io.h>



int main(void)
{
DDRC =0xff;

    while(1) {
       asm volatile (
             "out %0, %2" "\n\t" //PC0 = 0
             "out %0, %1" "\n\t" //PC0 = 1
             "out %0, %2" "\n\t" //PC0 = 0
             "out %0, %1" "\n\t" //PC0 = 1
             :
             :"I" (_SFR_IO_ADDR(PORTC)), "r" (PC0),"r" (PC1)
              );
    }
}


Program wgrałem do atmegi 32 przy taktowaniu 1MHz i podłączyłem oscyloskop:
Obrazek

Obliczyłem czas jednego cyklu 1/1 000 000 = 1us.
Dlaczego na oscyloskopie 1 cykl = 2 us ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 16:59 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 09 sie 2014
Posty: 6
Lokalizacja: Koszalin
Pomógł: 0

Faktycznie :)

Kod:
0000006c <main>:
//DDRC =0xff; to jest ustawienie portu jako wyjście
  6c:   8f ef          ldi   r24, 0xFF   ; 255                    //1 cykl
  6e:   84 bb          out   0x14, r24   ; 20                      //1 cykl

  70:   20 e0          ldi   r18, 0x00   ; 0                //1 cykl
  72:   30 e0          ldi   r19, 0x00   ; 0                //1 cykl
  74:   81 e0          ldi   r24, 0x01   ; 1                //1 cykl
  76:   90 e0          ldi   r25, 0x00   ; 0                //1 cykl
//początek pętli while ??
  78:   85 bb          out   0x15, r24   ; 21              //1 cykl
  7a:   25 bb          out   0x15, r18   ; 21              //1 cykl
  7c:   85 bb          out   0x15, r24   ; 21              //1 cykl
  7e:   25 bb          out   0x15, r18   ; 21               //1 cykl
  80:   fb cf          rjmp   .-10        ; 0x78 <main+0xc>   //2cykle


tutaj mam dodatkowe 2 cykle procesora czyli 2 us, to mi tłumaczy tę przerwę w wykresie
Kod:
 80:   fb cf          rjmp   .-10        ; 0x78 <main+0xc>   //2cykle


tylko dalej nie wiem dlaczego jeden cykl nie mieści się w 1us na oscyloskopie, powinno być tak :
Obrazek

czyli od zbocza narastającego do następnego zbocza narastającego a jest tak:
Obrazek

------------------------ [ Dodano po: 54 minutyach ]

kurcze już chyba doszedłem :)
Ilustruje to kolejny obrazek:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 20:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 maja 2013
Posty: 174
Lokalizacja: Kraków
Pomógł: 8

Witam,
tutaj jest trochę teorii w temacie cyklów zegarowych i maszynowych:
http://www.e-tronix.eu/15,rodzaje-cykli.html

_________________
Rozwój i utrzymywanie Oprogramowania



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 20:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

Krzysztof Pióro napisał(a):
kurcze już chyba doszedłem


No tak było i jest od zawsze ;) ... dobrze doszedłeś

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 21:48 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 09 sie 2014
Posty: 6
Lokalizacja: Koszalin
Pomógł: 0

Nigdy sie nad tym nie zastanawiałem dopóki nie liznąłem assemblera :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 21:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27314
Lokalizacja: Szczecin
Pomógł: 1041

Krzysztof Pióro napisał(a):
Nigdy sie nad tym nie zastanawiałem dopóki nie liznąłem assemblera :)


No właśnie dlatego zawsze mówię, że przynajmniej to "liźnięcie" asemblera gdy zabieramy się za jakąś rodzinę procków a piszemy normalnie kod w C ... daje od razu spore pojęcie o wielu różnych innych aspektach ...

A jak widać wcale ten asembler nie jest taki straszny ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 08:08 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 09 sie 2014
Posty: 6
Lokalizacja: Koszalin
Pomógł: 0

Zaczyna mi sie to podobać, bo daje pelna kontrole nad prockiem. A dzieki nauce podstaw assemblera można poznać jego budowę i zasadę działania. W polaczeniu z językiem C daje nieograniczone możliwości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO