Skocz do zawartości

atMegaTona

Użytkownicy
  • Zawartość

    179
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    2

atMegaTona wygrał w ostatnim dniu 31 sierpnia

atMegaTona ma najbardziej lubianą zawartość!

Reputacja

40 Bardzo dobra

2 obserwujących

O atMegaTona

  • Ranga
    5/10

Informacje

  • Płeć
    Brak informacji
  • Języki programowania
    C, ASM

Ostatnio na profilu byli

253 wyświetleń profilu
  1. Polecam zapoznać się z funkcją 'delay' i przetestować jej działanie w praktyce. Można osiągnąć niesamowite efekty przy umiejętnym jej stosowaniu Nie trzeba być wybitnym fachowcem żeby sobie z tym poradzić.
  2. Zakłócenia mogą się pojawiać z różnych przyczyn. Może to być zewnętrzny szum elektromagnetyczny o znacznej mocy jak i wynik pracy mikrokontrolera. Można sobie z tym radzić na kilka sposobów, jak np. przez używanie ADC SLEEP MODE podczas pobierania próbek, ekranowanie toru analogowego itp. Najprostszym rozwiązaniem Twojego problemu będzie chyba pull down na pinie adc przez rezystor conajmniej ~10k lub więcej w zależności od wartości napięcia zakłóceń (najlepiej zmierzyć lub pokombinować z wartościami rezystorów do 100k). Należy pamiętać przy tym, że wartość napięcia wejściowego może się nieznacznie zmniejszyć podczas stosowania podciągu do masy i trzeba to skompensować programowo. Można też zastosować prosty filtr RC w torze analogowym obliczony dla maksymalnej częstotliwości sygnału sterującego albo nawet filtrację aktywną z użyciem wzmacniaczy operacyjnych ale to już będzie pewnie przerostem formy nad treścią w tym konkretnym przypadku. Pozdrawiam.
  3. Trzeba by założyć jakieś 1,41 prądu na cewkę czyli jak dasz 2x powinno być ok. Reakcja którą opisujesz wskazuje na niepoprawne wysterowania albo uszkodzenie drivera ponieważ zbyt mały prąd podawany na silnik dał by taki efekt jak opisałeś przy dotykaniu palcem. Posprawdzaj jeszcze raz poprawność połączenia i sterowania a co do prądu to tak jak wyżej pisałem. Ta przetwornica jaką ma wydajność? Jeśli sterownik zasila silnik przez pwm to nie ma co się dziwić, że napięcie jest niższe. Zakładam zbyt mało wydajną przetwornicę albo błąd w podłączeniu lub wysterowaniu (piny sterujące muszą być prawidłowo podłączone i wysterowane, masy muszą być połączone). Wiem, banały ale każdy się czasem o nie potyka.
  4. lol Nie mam bladego pojęcia o co Ci może chodzić, racz więc łaskawie wyjaśnić. Wg. mojej wiedzy słowo extern ma zastosowanie jedynie do zmiennych podczas ich deklarowania w sytuacji kiedy zmienne te są definiowane w innej jednostce kompilacji niż ta w której się do nich odwołuje. W przypadku funkcji nie ma żadnego znaczenia i jest zwyczajnie ignorowane podczas kompilacji. Ale być może wiedzę mam niepełną tak więc jeszcze raz proszę o wyjaśnienie tejże zawiłej kwestii.
  5. Trudno powiedzieć co masz na myśli pisząc "poprawić". Dlaczego extern? i dlaczego te funkcje są definiowane w funkcji main? Myślę, że trzeba funkcje zdefiniować poza main i skoro mają być definiowane w tym samym pliku to extern w deklaracji niepotrzebne. Sama deklaracja musi oczywiście zostać. O to chodziło?
  6. Kiedy widzę tego typu inwencję twórczą w programowaniu to odczuwam pewną formę zniechęcenia do analizowania takiego kodu. Cóż, każdy kiedyś zaczynał mimo to warto jednak uruchomić pokłady własnej kreatywności czasami zamiast liczyć na cudzą a samemu zbierać uznania. Jak wspomniałem nie chce mi się tego analizować ale jeśli nic w logice tych przełączników nie sknociłeś to może nie procedura jest tu winna a elektryka. Może wykrywasz drgania styków na tych przełącznikach i dlatego masz 2 sygnały na wejściu. R _o_ SW1 [pin]-----------------o-----[/\/\/]-------* *-------- | | ----- | ----- C1 | | | __|__ __|__ \ / \ / \ / gnd \ / gnd Spróbuj dać na pin jakiś kondensator np. 10 - 100n do masy i rezystor w razie potrzeby z 1k, a najlepiej sprawdź oscyloskopem jak te przełączenia wyglądają jeśli masz taką możliwość.
  7. Jeśli ma to być podłączone do istniejącej już instalacji gdzie trzeba się dopasować do poziomów napięć to masz takie scalaki: https://datasheets.maximintegrated.com/en/ds/MAX14938-MAX14939.pdf schemat podłączenia figure 11. a jeśli chcesz po prostu uzyskać komunikację między płytkami to użyj UARTa bezpośrednio. Nie potrzebujesz żadnego konwertera jeśli obie płytki działają na tym samym napięciu. Wystarczy połączyć masy oraz wyjście i wejście uarta z jednej płytki z wejściem i wyjściem drugiej płytki a do samej komunikacji może być biblioteka arduino. Warto przy tej okazji zajrzeć do datasheetu od atmegi.
  8. Nie rozumiem koncepcji, co Ty chcesz tam kalibrować czego nie da się oprogramować w przypadku 2 potencjometrów?? Możesz to jeszcze raz szczegółowo wytłumaczyć krok po kroku czego się konkretnie po tych potencjometrach spodziewasz? Być może nie będzie konieczne kupowanie jakichś dodatkowych płytek z internetu a jedynie odpowiednie opisanie problemu w arduino. Przecież offset można ustalić dowolnie.
  9. Częściowo masz rację, jednak to co najważniejsze w tym zestawieniu jednak uszło uwadze. typedef struct structb_t{ int x; int y; int (*foo)(); struct structb_t *this; }structb_t; int f1(structb_t *s, int x, int y){ s->x = x; s->y = y; return 0; } structb_t st = {0,0,f1,&st}; Wskaźnika w polu struktury do własnego typu nie da się inaczej zadeklarować niż ten powyższy, nawet jeśli wcześniej zadeklarowalibyśmy nowy typ danych. Jeśli z kolei definicja struktury nie będzie jednocześnie deklaracją ( structb_t na początku i końcu) nie będzie można do nie wskaźnika zdefiniować tak więc to chyba jedyny sposób w jaki można to prawidłowo zrobić. Druga rzecz to wskaźnik na funkcję. Zwrócić uwagę należy na fakt, że wskaźnik jest deklarowany bez żadnych argumentów i jest to jedyny sposób aby móc uzyskać możliwość wywołania funkcji z dowolną ilością argumentów bez kontroli kompilatora. Argumenty nadmiarowe po prostu ulegną zniszczeniu podczas wywoływania funkcji i nic poważnego się nie stanie poza wygenerowaniem kilku linijek assemblera więcej. Sprawa się komplikuje kiedy argumentów będzie zbyt mało ponieważ każdemu niepodanemu argumentowi zostanie przypisana przypadkowa wartość: zawartość kolejnej komórki pamięci po ostatnim prawidłowym argumencie dlatego należy unikać tego typu wypadków ponieważ kompilator nie kontroluje ani ilości ani typów podawanych argumentów przy wywołaniu funkcji przez tak zadeklarowany wskaźnik. Jednak korzyści płynące z używania tego wyjątku języka C rekompensują z nadmiarem niedogodności. Wystarczy zadbać o to aby kontekst programu określał prawidłowe jego użycie. Wskaźniki na własny typ to przydatna funkcjonalność, można np. dzięki nim zbudować listę połączoną co z kolei może stanowić zalążek do budowy RTOS w zestawieniu ze wskaźnikami na funkcje nawet na najmniejszych uC. Niestety w avr dynamiczna alokacja pamięci jest nieco powolna a samej pamięci jest niewiele ale przy kilku wątkach działających jednocześnie można ten sposób stosować statycznie włączając i wyłączając, przez przypisywanie i zerowanie wskaźników, poszczególne człony listy zamiast alokować i zwalniać pamięć. Zdecydowanie lepiej do takiej zabawy nadają się ARMy.
  10. ... i żeby nudno nie było. 1 Czy ten kod się skompiluje? Spróbuj odpowiedzieć nie sprawdzając, później sprawdź. 2 Co się stanie z resztą nadmiarowych argumentów funkcji? 3 Co się stanie gdy argumentów będzie za mało? #include <stdio.h> typedef struct structb_t{ int x; int y; int (*foo)(); struct structb_t *this; }structb_t; int f1(structb_t *s, int x, int y){ s->x = x; s->y = y; return 0; } structb_t st = {0,0,f1,&st}; int main() { st.foo(&st,1,2,123,11201, st.this); printf("x = %u; y = %u;\n", st.x, st.y); return 0; }
  11. Oczywiście się zgadza. A czy te konstrukcje są prawidłowa? Uzasadnij odp. i wyjaśnij dlaczego definicje kontenerów różnią się. typedef union{ int b; char a; }union_u; typedef struct{ int x; int y; }structa_t; typedef struct structb_t{ union_u un; int x; struct structb_t *this; }structb_t; i co się stanie po usunięciu słowa kluczowego przed wskaźnikiem *this i dlaczego. :)
  12. Obie są błędne. Pierwsza to próba przypisania adresu do stałego wskaźnika, druga próbuje nadpisać dane przez wskaźnik na stałe dane co jest oczywiście błędem Odnośnie powyższego też mam pytanie. Czy taki sposób odniesienia się do pierwszego elementu powyższej tablicy jest prawidłowy? double *wsk = (double*)wskD; *(++wsk-1) = 0b01100000110000001010000000000000;
  13. @jasiekk913 to z czym masz problem to podstawy podstaw. Może warto byłoby jednak poświęcić nieco czasu na zapoznanie się z podstawami zasilania urządzeń elektrycznych? @kaczakat ma tu zupełną rację i myślę, że jego wypowiedź powinna rozwiązać twój problem permanentnie. Nie jest dobrym pomysłem zasilanie równoległe z 2 portów USB. Zaopatrz się w przetwornice i zasil sobie wszystko z jednego zasilacza.
  14. lol. Napisz sobie algorytm sterowania układem tłoków ssąco-tłoczących monitorowanych za pomocą analogowych czujników ciśnienia i temperatury, przez najbliższy miesiąc nie będziesz się nudzić i zawracać d.. po forach internetowych a takie urządzenie na pewno kiedyś się do czegoś przyda. A tak poważnie, to skoro nie masz weny to zajmij się w tym czasie czymś pożytecznym i np. posprzątaj w szafkach albo po prostu idź i żyj, żyj chłopie bo życie krótkie jest, lata mijają niepostrzeżenie a później się żałuje zmarnowanego czasu na arduino, stmy i inne wynalazki szatana.. smutna prawda w zdecydowanej większości przypadków.
  15. [+]-----|>|------o-----------[ uC] | _|_ ___ | | [gnd] Przy mikrokontrolerach nie trzeba aż takich wielkich, wystarczy 10 - 100uF w zależności od tętnień najlepiej LOW ESR. Mimo wszystko nie jest to eleganckie rozwiązanie.
×
×
  • Utwórz nowe...