Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'atmega328'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 6 wyników

  1. Witam, na wstępie przepraszam, jeśli podobny temat już był, sam jednak nie mogłem znaleźć tego o co mi chodzi. Mój problem wygląda tak. Podczas jednego z kursów Arduino na Forbocie prawdopodobnie zepsułem swój mikroprocesor. Środowisko pokazuje, że kod został wgrany bez problemów lecz nie wykonuje się on, a na płytce prototypowej miga dioda z podpisem "L". Na szczęście mam drugą atmegę328, lecz kupiłem wersję bez bootloadera ponieważ była tańsza, a sam chciałem wypalić loader przy pomocy Arduino. Teraz skoro atmega nie działa zastanawiam się nad kilkoma opcjami. 1. Kupno nowej atmegi z bootloaderem i wypalenie bootloadera na drugiej. 2. Kupienie programatora. W przypadku programatora mam kilka pytań. Czy przy pomocy programatora da się w jakiś sposób wypalić bootloader na czystej atmedze? Jakiego rodzaju programator byłby dobry na początek i czy potrzeba do niego jakieś szczególne sterowniki (nie ukrywam, że wolałbym mieć coś kompatybilnego z linuxem, ponieważ używam praktycznie tylko tego systemu). Jeśli miałbym programator, to jak wygląda pisanie kodu w czystym C na atmegę? Czy istnieją alternatywne środowiska do Atmel Studio, które działają na systemie z pingwinem? Z góry dziękuje za wszelkie odpowiedzi i pozdrawiam!
  2. Hej, Umieszczam tutaj sposób wypalenia bootloadera na Atmega328P (Arduino Uno) za pomocą Arduino Leonardo. Nie jest to tak proste jak z użyciem Uno i długo się z tym męczyłem, wiec wrzucam dla potomnych. Nie jestem pewien dlaczego tak się robi, ale działa Potrzebujesz: Leonardo, Atmega328P, rezonatora kwarcowego, rezystora 10k om, dwóch kondensorów 22pF. Niestety musisz przeinstalować Arduino IDE do wersji 1.0.5. Wersje tą znajdziesz na oficjalnej stronie Arduino (https://www.arduino.cc/en/main/OldSoftwareReleases). 1. odinstaluj Arduino IDE 2. zainstaluj Arduino IDE 1.0.5 3. otwórz przykład ArduinoISP (Plik->Przykłady->ArduinoISP) 4. zmień "#define RESET SS" na "#define RESET 10" (druga linijka po komentarzu) 5. zmień "#define LED_HB 9" na "#define LED_HB 13" 6. wybierz płytkę Leonardo (Narzędzia-> Płytki->Arduino Leonardo) 7. wybierz port (COM) 8. wgraj program 9. przejdź do folderu "hardware" (C:\Program Files (x86)\Arduino\hardware) (ścieżka może się trochę różnić, ale chyba wyłapałeś o co chodzi) 10. utwórz w folderze hardware folder o nazwie "leofix" 11. otwórz notatnik i przekopiuj : " arduinoispleo.name=Arduino as ISP (Leonardo) arduinoispleo.communication=serial arduinoispleo.protocol=arduino arduinoispleo.speed=19200 " 12. zapisz to jako programmers.txt 13. podłącz układ : Atmego328P: Arduino Leonardo: RX pin 2-------------------------------------digital pin 0 TX pin 3-------------------------------------digital pin 1 MISO pin 18-----------------------------------ICSP pin MISO MOSI pin 17-----------------------------------ICSP pin MOSI SCK pin 19-----------------------------------ICSP pin SCK RESET pin1-------------------------------------digital pin 10 oraz 5v i GND (pamiętaj, że GND jest w dwóch miejscach, 5V również ) 14. dodaj rezonator, rezystor i dwa kondensatory. Schemat znajdziesz na oficjalnej stronie: https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard. 15. zrestartuj Arduino IDE 16. wybierz płytkę UNO (Narzędzia-> Płytki->Arduino UNO) 17. wybierz port (COM) 18. wybierz Leonardo jako programator (Narzędzia->Programator-> Arduino as ISP (Leonardo) ) 19. wypal bootloader (Narzędzia->Wypal Bootloader) Jeżeli ktoś wie jak to zrobić prościej to piszcie (np. nie przeinstalowywanie Ardiuno IDE). Sorry ale nie wiem jak się wstawia zdjęcia źródło: 1. https://www.instructables.com/id/Arduino-Leonardo-as-Isp/ 2. można też obejrzeć Elektro Marsa (62. Jak przenieść projekt z Arduino na ATmega 328 )
  3. Witam, ostatnio zbudowałem dosyć prosty układ, który steruje elektro-zamkiem (czujnik RFID i atmega328P). Elektro-zamek jest zasilany napięciem 12V, atmega również jest zasilana tym zasilaczem poprzez przetwornicę na 5V. Zamek jest sterowany za pomocą przekaźnika, który ma cewkę na 5V i tutaj pojawia się problem. Wyprowadziłem sobie trzy przewody z płytki PCB (+,- i sygnał sterujący, wysoki stan kiedy czujnik wykryje prawidłową kartę) po podłączeniu tych przewodów do przekaźnika i przyłożeniu prawidłowej karty nic się nie dzieję na przekaźniku. Zmierzyłem multimetrem napięcia na tych trzech przewodach i na plusie miałem 4,97 V, masa 0,07V, a sygnał sterujący 4,97V na 5 sekund kiedy karta zostaje przyłożona. Przekaźnik sterowany z arduino i zasilony z arduino działa bez zarzutów, da się usłyszeć przełączenia oraz zapala się na czas wysterowania dioda. Przekaźnik: JQC-3FF-S-Z-5V
  4. Hej, zbudowałem sobie takie samodzielne Arduino w oparciu o ATmega328p, jako mój programator służy arduino, z jego pomocą wgrałem bootloader na wyżej wymienioną atmege. I pojawił się problem gdy wgrywam za pomocą programatora(arduino as isp) program(miganie diodą) i podpinam zewnętrzne zasilanie, odpinam programator wszystko działa okej, ale gdy wgrałem sobie drugi program(sterowanie serwomechanizmem z pomocą modułu bluetooth HC-05) to jeśli jestem na zasilaniu z programatora(arduino) to program działa, natomiast jeśli odepnę i podłącze zewnętrzne zasilanie 5V to wtedy nie działa, (chyba) układ jest zasilony bo zapala się dioda z funkcji setup(), ale to co dzieje się w loop() tak jakby już nie działało bo nie ma mrugnięcia diodą a więc tym samym i sam serwomechanizm nie działa. Będę wdzięczny za wszystkie pomysły które mogą pomóc rozwiązać problem. Poniżej fragment kodu gdyby był potrzebny. Dodałem również schemat rozważałem rozdzielenie zasilania atmegi 5V i serwomechanizmy odzielnie na 6V(docelowo 4 serwomechanizmy), ale jeszcze nie wiem jak to się do końca łączy czy masy zasilania razem czy osobno czy w jakiś inny sposób(fajnie jakby ktoś się również tą wiedzą podzielił) ale na ten moment jest na jednym zasilaniu 5V całość atmega jak i 1 serwomechanizm. Na rx/tx dałem konwerter poziomów logicznych 5V/3.3V i jest też stabilizator żeby zrobić 3.3V. JP2 na schemacie to goldpiny na podpięcie serwa. #include <Servo.h> #include <SoftwareSerial.h> Servo s1; int bluetoothTx = 11; int bluetoothRx = 10; SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); unsigned int servopos = 0; unsigned int servopos1 = 0; unsigned int servopos2 = 0; unsigned int realservo = 0; void setup() { s1.attach(9); bluetooth.begin(9600); pinMode(8, OUTPUT); digitalWrite(8, HIGH); } void loop() { if(bluetooth.available() >= 2) { digitalWrite(8, LOW); delay(700); digitalWrite(8, HIGH); servopos1 = bluetooth.read(); servopos2 = bluetooth.read(); realservo = servopos1 + (servopos2*256); Serial.print("Realservo - odczyt: "); Serial.println(realservo); if(realservo >=0 && realservo <=180) { digitalWrite(8, LOW); delay(300); digitalWrite(8, HIGH); digitalWrite(8, LOW); delay(300); digitalWrite(8, HIGH); s1.write(realservo); Serial.print("Pozycja serwo s1 "); Serial.println(realservo); delay(200); } }
  5. Witam zbudowałem sześcian z diod LED i chciałbym sterować świeceniem diod pilotem. Program napisałem wykorzystując bibliotekę Rc5 i jest kilka problemów. Nie potrafię napisać kodu, który po wciśnięciu przycisku np.1 na pilocie zapamięta wciśniecie przycisku jako logiczne 1 i wywoła funkcję, która będzie świeciła diodami(tryb 1) Po wciśnięciu innego przycisku np. 2 chciałbym aby diody przestały świecić w "trybie 1 i" zaczęły inaczej świecić (trybie 2). Mówiąc krótko wciskam przycisk 1 diody świecą w trybie 1 wciskam kolejny przycisk i diody zaczynają inaczej świecić(tryb 2). Dotychczas udało mi się zrobić tak, że wcisnę np. przycisk 1 i program zapamiętuje wciśniecie przycisku i diody ciągle świecą (wcześniej musiałem ciągle trzymać przycisk, żeby diody ciągle świeciły). Ale jest problem taki, że program zapamiętuje wciśniecie tego przycisku i dalej nic nie da się zrobić ani zmienić tryb świecenia ani wyłączyć diody(muszę zrobić reset aby diody się wyłączyły). Mógłby mi ktoś to na chłopski rozum wytłumaczyć jak to zrobić? Moje tryby napisałem jako funkcje, gdzie pierwsza funkcja to zwykłe miganie diodami, a druga to rozjaśnianie i gaszenie diod z pinu PWM. Tak wygląda mój kod: #define warstwa1 3 #define warstwa11 5 //podlaczenie diod do pinow PWM #define warstwa2 6 #define warstwa22 9 #define warstwa3 10 #define warstwa33 11 #define TSOP_PIN 7 //odbiornik podczerwieni #include <RC5.h> //biblioteka standard RC5 RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP int wypelnienie=0; //zmienna dla PWM (dla funkcji dioda1) //Zmienne dla RC5 byte address; byte command; byte toggle; int button; void setup() { pinMode(TSOP_PIN ,INPUT); //odbiornik podczerwieni pinMode(warstwa1, OUTPUT); //diody jako wyjscie i wylacz wszystkie na starcie digitalWrite(warstwa1, 0); pinMode(warstwa11, OUTPUT); digitalWrite(warstwa11, 0); pinMode(warstwa2, OUTPUT); digitalWrite(warstwa2, 0); pinMode(warstwa22, OUTPUT); digitalWrite(warstwa22, 0); pinMode(warstwa3, OUTPUT); digitalWrite(warstwa3, 0); pinMode(warstwa33, OUTPUT); digitalWrite(warstwa33, 0); Serial.begin(9600); } void loop() { //Jeśli odebrano komendę if (rc5.read(&toggle, &address, &command)) { if(command == 2) { button=2; } // jesli odebrano zmienną command o wartosci 2 to zmienna button ma wartosc 2 else if (command == 1) { button=1;} } switch(button){ //wybierz zmienna button case 2: funkcja2(255,5,50); // Serial.println(button); break; case 1: funkcja1(250); //wlacz funkcje migania Serial.println(button); break; } } void funkcja1(int czas) { //funkcja1 digitalWrite(warstwa33, HIGH); delay(czas); digitalWrite(warstwa33, LOW); delay(czas); } void funkcja2( int ilewypelnienie, int zmiana, int czas){ //funkcja2 if(wypelnienie<ilewypelnienie){ analogWrite(warstwa1, wypelnienie); analogWrite(warstwa11, wypelnienie); analogWrite(warstwa2, wypelnienie); analogWrite(warstwa22, wypelnienie); analogWrite(warstwa3, wypelnienie); analogWrite(warstwa33, wypelnienie); wypelnienie+= zmiana; } if(wypelnienie==ilewypelnienie){ while(wypelnienie!=0){ analogWrite(warstwa1, wypelnienie); analogWrite(warstwa11, wypelnienie); analogWrite(warstwa2, wypelnienie); analogWrite(warstwa22, wypelnienie); analogWrite(warstwa3, wypelnienie); analogWrite(warstwa33, wypelnienie); wypelnienie=wypelnienie-zmiana; delay(czas); } } delay(czas); } I teraz po wciśnięciu przycisku 2 (tryb 2)do zmiennej button będzie ciągle przypisywał wartość 2 i nie mogę wtedy włączyć trybu 1. Tak to wygląda w monitorze portu szeregowego(screen w załączniku). I teraz jak zrobić, żeby dało się przełączać tryby lub wciśniecie tego samego przycisku powodowało by wyłączenie danego trybu? Napisałem prosty program, który po wciśnięciu switcha zapala diode i dioda gaśnie dopiero po ponownym wciśnięciu switcha. Tak wygląda ten kod: boolean buttonState1 = false; #define buttonPin1 7 //pin do odczytu stanu przycisku #define led1 11 void setup() { pinMode(led1, OUTPUT); //Dioda jako wyjście pinMode(buttonPin1, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led1, LOW); //Wyłączenie diody Serial.begin(9600); } void loop() { if (digitalRead(buttonPin1) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState1 = !buttonState1; //zmiana na odwrotny stan if (buttonState1 == true){ digitalWrite(led1, HIGH); Serial.println(buttonState1); } else { digitalWrite(led1, LOW); Serial.println(buttonState1); } while (digitalRead(buttonPin1) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } } Przerobiłem kod tak aby po wciśnieciu przycisku wywołał funkcje 2 lecz program nie działa tak jak chciałem tzn. rozjaśnienie i przygaszenie diody. boolean buttonState1 = false; // aktualny stan zaświecenia diody #define buttonPin1 7 //pin do odczytu stanu przycisku #define led1 11 //pin do obsługi diody int wypelnienie = 0; void setup() { pinMode(led1, OUTPUT); //Dioda jako wyjście pinMode(buttonPin1, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led1, LOW); //Wyłączenie diody Serial.begin(9600); } void loop() { if (digitalRead(buttonPin1) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState1 = !buttonState1; //jest stan true i zamienia go na false if (buttonState1 == true){ funkcja2(255,5,50); Serial.println(buttonState1); Serial.println(wypelnienie); } else { digitalWrite(led1, LOW); // dioda sie Serial.println(buttonState1); Serial.println(wypelnienie); } while (digitalRead(buttonPin1) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } } void funkcja2( int ilewypelnienie, int zmiana, int czas){ //ta sama funkcja co dioda tylko, ze na instrukcji warunkowej if if(wypelnienie<ilewypelnienie){ analogWrite(led1, wypelnienie); wypelnienie+= zmiana; } if(wypelnienie==ilewypelnienie){ while(wypelnienie!=0){ analogWrite(led1, wypelnienie); wypelnienie=wypelnienie-zmiana; delay(czas); } } delay(czas); } Wciśniecie przycisku powoduje ustawienie stanu logicznego 1 i zmianę wypełnienia o wartość 5. Wytłumaczy mi ktoś łopatologiczne jak napisać kod który: Po wciśnięciu przycisku na pilocie lub zwykłego switcha zapamięta wciśniecie przycisku jako logiczne 1 i będzie wykonywał wywołaną funkcje Ponowne wciśniecie tego samego przycisku spowoduje wyłączenie wywołanej funkcji lub wciśniecie innego przycisku zatrzyma aktualnie wywoływaną funkcję i wywoła inną Proszę o pomoc.
  6. Witam panowie wgrałem prosty program przykładowy blik do mikrokontrolera Arduino Uno. Teraz chciałbym aby ten program działał bez płytki arduino na płytce prototypowej. Na stronie arduino znalazłem poradnik jak to zrobić zrobiłem wszystko według instrukcji i nie działa program. Na pinie jest zaledwie 0,5V gdzie napięcie powinno raz mieć 5V a po 1sec 0V(bo taki program jest wgrany). Nie wiem co jest nie tak wszystko powinno byc dobrze zmontowane wklejam zdjęcia układu i proszę o pomoc.
×
×
  • Utwórz nowe...