Systemy wbudowane 2018 - konsultacje

sw

(Marek Materzok) #1

W tym temacie można zadawać pytania dotyczące wykładu i zadań z przedmiotu “Systemy wbudowane” edycja 2018.


(Karol Kędzierski) #2

Jak powinniśmy odmierzać czas w zadaniu 1 z listy 2?


(Marek Materzok) #3

Dokładnie tak, jak we wcześniejszych zadaniach - używając makra _delay_ms.


(Michał Łazowski) #4

Czy dobrze rozumiem, ze podczas delay mamy wykonywac inne czynnosci? Np podczas reprezentowania wczesniej podanych wcisniec przycisku mamy moc podawac do bufora nowe?
Jesli tak to czy mozna prosic o wskazowke jak mamy obejsc zatrzymanie calego programu?

Czy wcisniecia maja byc reprezentowane na diodzie w takich samych odstepach czasu jak byly podawane?

Czy na podanie wejscia powinien byc okreslony czas czy tez mamy czekac, az od odstatniego wcisniecia uplynie sekunda?


(Marek Materzok) #5
  1. Nie. Jak mówiłem na wykładzie - makro _delay_ms generuje pętlę aktywnego czekania. Wszystkie operacje potrzebne do wykonania zadania 1 z listy 2 należy wykonać pomiędzy opóźnieniami. Opóźnienia powinny być oczywiście istotnie krótsze niż 1 sekunda, ale nie muszą być bardzo krótkie - ludzki czas reakcji z punktu widzenia mikrokontrolera jest bardzo długi!
  2. Tak.
  3. Nie. Program ma działać w czasie rzeczywistym bez trybów pracy.

Myślę, że coś Pan przekomplikowuje. Wzorcowe rozwiązanie zadania jest naprawdę minimalną modyfikacją programu przykładowego “zapalanie diody przyciskiem”. Podpowiedź do zadania praktycznie je rozwiązuje.


(Maciej Dudek) #6

Mam małe pytanie odnośnie przełączników.
Czy powinno być tak, że przełącznik łączy te nóżki co są obok siebie?
To znaczy te bliżej siebie?


(Marek Materzok) #7

Przycisk wpięty w płytkę stykową zwiera razem każdą kolumnę, a włącznik jest pomiędzy kolumnami. Patrz np:


(Maciek Draguła) #8

Na stronie SW na SKOSie w sekcji “Do przeczytania” zarówno w obecnym jak i ubiegłym tygodniu jest rozdział 14 dokumentacji ATmegi. Wydaje mi się, że wspominał Pan, że jeden z nich jest niewłaściwie podany i powinniśmy przeczytać coś innego. Jeśli dobrze pamiętam, to czy mógłby Pan to poprawić?


(Marek Materzok) #9

Rozdział 14 jest ciągle obowiązujący. Dopisałem do pierwszego wykładu rozdziały 2, 7 i 8 jako wprowadzenie do architektury AVR.


(Łukasz Klasiński) #10

W zadaniu pierwszym mamy wczytywać dane z pamięci flash, ale powoduje to znaczące lagi, przez które melodia nie gra jak trzeba. Skoro dostępy do pamięci są takie wolne to co z tym zrobić?


(Marek Materzok) #11

Nie są wolne, instrukcja odczytu bajtu z pamięci flash zajmuje tylko o połowę więcej niż zwykły odczyt z pamięci RAM (3 cykle zamiast dwóch). Takich dostępów trzeba w tym zadaniu wykonać ledwie kilka w ciągu sekundy. Jeśli ma Pan jakiś problem z prawidłowym generowaniem dźwięku, czasy dostępu do pamięci flash na pewno nie są z nim związane.


(Łukasz Klasiński) #12

Ma Pan rację, przez to że miałem zmienne w 16 bitach, ucinał mi część danych i powstawały artefakty


(Maciek Draguła) #13

Czy mógłby ktoś podpowiedzieć, w którym miejscu należy w Makefile’u dodać informację, żeby avr-gcc dolinkował i2c.c do głównego programu, np. zad1.c?


(Łukasz Klasiński) #14

skompiluj sobie oddzielnie i dodaj w OBJ nazwa.o


(Stanisław Koza) #15

Podpiąłem układ eeprom 24c04 tak jak na schemacie z zadania 1 z listy 7.

Po wrzuceniu na płytkę kodu przykładowego (odczyt EEPROM I2C) program wypisuje
I2C EEPROM write request failed, status: 20

Zgodnie z dokumentacją kod 0x20 oznacza:

SLA+W has been transmitted; NOT ACK has been received
(SLA to slave address, R/W to read/write, w tym przypadku write)

Czyli jeżeli dobrze rozumiem przesłany adres urządzenia (w kodzie eeprom_addr) jest błędny.
Zgodnie z dokumentacją powinien on mieć wartość 0b10100000 czyli 0xa0 tak jak w kodzie przykładowym. Próbowałem też łączyć się inkrementując adres aż zwróci 0x18 (bruteforce) ale nie udało mi się znaleźć adresu dla którego zostanie zwrócone 0x18.

Ma ktoś pomysł jak to naprawić?

//EDIT
i2cCheck(0x08, “I2C start”) mi przechodzi jakby co


(Stanisław Koza) #16

Eeprom mi nie do końca stykał na płytce stykowej