Skocz do zawartości

andrews

Użytkownicy
  • Zawartość

    29
  • Rejestracja

  • Ostatnio

Reputacja

14 Dobra

O andrews

  • Ranga
    3/10
  1. andrews

    Migająca dioda.

    Obawiam się, że na jednym tranzystorze migania diodą nie zrobisz. Zobacz np. tutaj: http://hobby-elektronika.eu/multiwibrator.html
  2. https://techniczny.net/po-co-jest-i-jak-skonfigurowac-przekierowanie-portow/
  3. W celu dokonania konwersji na string potrzebne jest zarezerwowanie odpowiedniej ilości miejsca w pamięci RAM, w której funkcja itoa będzie mogła umieścić wynik operacji, czyli ciąg znaków. Każdy ciąg znaków w języku C musi kończyć się znakiem terminującym (bajt o wartości 0). Do tego potrzebne jest miejsce na 5 cyfr, co wynika z zakresu wartości, jakie może przyjmować zmienna typu int (jak napisałem wcześniej w przypadku AVR jest to wartość 16-bitowa), no i miejsce na znak minus w przypadku liczb ujemnych. To daje razem 7 znaków. Jest to taka wartość minimalna rozmiaru bufora gwarantująca popr
  4. sprintf na pewno pomoże, jest to funkcja mająca duże możliwości konwersji różnych typów danych oraz formatowania tekstu, jednak jej użycie spowoduje spore zwiększenie rozmiaru kodu wynikowego (czyli zajętości FLASH), co w mniejszych mikrokontrolerach AVR może nie być bez znaczenia. Ponadto użycie tej funkcji może początkującemu programiście sprawić problem. Jeśli chodzi tylko o prostą konwersję liczby całkowitej do ciągu znaków, osobiście proponowałbym funkcję itoa oferowaną przez avr-libc (plik nagłówkowy <stdlib.h>). Przykład użycia: #include <avr/io.h> #include <
  5. To nie jest preprocesor, tylko pliki nagłówkowe, które wykorzystują możliwości preprocesorów standardu C99, bo domyślam się, że z takiego właśnie korzystasz. Zresztą dla C11 też powinno działać. Wchodzisz na stronę https://gitlab.inria.fr/gustedt/p99/. Ściągasz folder o nazwie p99 (oczywiście z zawartością). #include "ścieżka_do_folderu_p99/p99_logical.h" #define STRINGIFY1(x) #x #define STRINGIFY(x) STRINGIFY1(x) #define ILOSC 16 const char PROGMEM napis[]="Wpisz liczbę od zera do " STRINGIFY(P99_MINUS(ILOSC,1));
  6. O jakim dodatkowym preprocesorze piszesz?
  7. Jeśli można, to może ja coś doradzę: https://stackoverflow.com/questions/7126329/how-do-i-stringify-macros-that-are-the-results-of-operations-on-macros
  8. andrews

    Silnik krokowy i Arduino

    Pokaż może jakiś schemat, jak to masz połączone. Jakie napięcie zasilania silnika? Wejścia M0, M1 i M2 masz gdzieś podłączone? Możesz zmierzyć, jakie są na nich napięcia? Dobrze byłoby też, gdybyś mógł zmierzyć faktyczną częstotliwość na wejściu STEP (miernikiem/oscyloskopem), bo może problem jest w taktowaniu mikrokontrolera i generowana przez niego częstotliwość jest niższa od zamierzonej. Możesz mieć np. nieprawidłowo ustawione fusebity i mikrokontroler jest taktowany częstotliwością 1 MHz zamiast 16MHz, co będzie skutkować również 16-krotnie niższą częstotliwością na pinie STEP. Z dru
  9. andrews

    Silnik krokowy i Arduino

    Problemem może być to, że w kółko bardzo szybko wywołujesz funkcję tone(). Funkcję tę powinno się wywołać raz, a działa ona do momentu wywołania funkcji noTone(). Dopiero później można ponownie wywołać funkcję tone(). Spróbuj może czegoś takiego: void loop() { tone(STEP, 800); delay(5000); noTone(); delay(5000); } Silnik powinien się kręcić przez 5 sekund, po czym przez 5 sekund powinie być zatrzymany i tak na zmianę. Nie znam zbytnio Arduino, ale wydaje mi się, że ta funkcja to nie najlepszy sposób sterowania silnikiem krokowym (zależy oczywiście, jaki efekt chce
  10. andrews

    Przerwanie pętli While

    A mi się tak coś wydaje, że może wystarczyłoby w tym kodzie przenieść jeden z nawiasów klamrowych z końca funkcji loop() do linijki następującej po linijce: liczba = odebraneDane.toInt();
  11. Jeśli chodzi o wersję z PROGMEM, to przyczyną nieprawidłowego działania jest funkcja LCD_Write_Text(). Akceptuje ona tylko wskaźniki do pamięci RAM, więc stamtąd są wyświetlane dane, a nie z pamięci FLASH, w której tak na prawdę znajduje się tekst do wyświetlenia. Rozwiązaniem tego błędu może być np. utworzenie dodatkowej funkcji, która będzie odczytywała i wyświetlała dane dane z pamięci FLASH: // dane w pamięci FLASH const char T1[] PROGMEM = "DS1307"; const char T2[] PROGMEM = "TESTER"; const char * const menu[2] PROGMEM = {T1, T2}; // funkcja void LCD_Write_Text_P(const char * Text){
  12. Nie tylko "low level interrupt on INT0" może wybudzić z trybu Power-down. Zgodnie z tabelką 7-1 dokumentacji jak i informacją w punkcie 7.1.2 na stronie 35 do wybudzenia można też użyć Pin Change Interrupt. Przerwanie to, odpowiednio skonfigurowane, może wybudzić mikrokontroler przy pomocy zmiany stanu na dowolnych pinach PCINT bez konieczności używania jakichkolwiek dodatkowych elementów zewnętrznych.
  13. Chyba źle to analizujesz. Dorysuj sobie może do powyższego schematu kondensator, który jest zwykle w zasilaczu i spróbuj ponownie to przeanalizować. Może wtedy zauważysz, w jaki sposób energia samoindukcji będzie zwracana do zasilania (prąd zamyka się poprzez ten właśnie kondensator, doładowując go). Weź też pod uwagę, które pary tranzystorów biorą udział w kluczowaniu PWM (T3 i T6 dla jednego kierunku obrotów oraz T5 i T4 dla drugiego) i że nie musisz wyłączać obydwu tranzystorów, aby przerwać przepływ prądu w silniku. Jeśli jeden z nich pozostanie włączony, to obwód rozładowania energii
  14. Tranzystory , których użyłeś, mają wbudowane diody, i to najprawdopodobniej przez diodę dolnego tranzystora płynie prąd, a nie przez sam tranzystor (ze względu na polaryzację prądu). Spróbuj użyć samej diody (o odpowiednim prądzie przewodzenia oczywiście) a efekt zapewne będzie bardzo podobny. Ogólnie sposób sterowania jednym tranzystorem, bez tej diody podłączonej równolegle do silnika, jest mało bezpieczny ze względu na indukowanie się sporych impulsów napięcia po wyłączeniu prądu płynącego przez silnik. Energia zgromadzona w rdzeniu elementu indukcyjnego, po odłączeniu prądu płynącego
  15. andrews

    Problemy z Pololu A4988

    Może źle to ująłem. Miałem na myśli, że tyle maksymalnie może pobierać silnik, ale nie zawsze tak będzie. Właściwie to nawet przy pracy pełnokrokowej prąd płynie przez obydwie cewki, ale tylko ok. 70% maksymalnego. Sterownik sam sobie to reguluje na podstawie napięcia ustawionego potencjometrem na pinie REF sterownika A4988 w zależności od trybu pracy i kolejnego kroku. Napisz dokładnie, jak mierzysz prąd. Obawiam się, że przy pomiarze prądu podłączasz przewody pomiarowe tak samo jak podczas pomiaru napięcia, czyli do VMOT i GND. Jeśli chcesz zmierzyć prąd pobierany przez układ, musi
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.