Skocz do zawartości

Ustawienie pinu jak wyjście HS przy starcie programu


daniel89

Pomocna odpowiedź

A po trzecie - kontynuując za @Elvis - Arduino nie  ustawia pinów na zera tylko na wejścia.Właśnie po to, byś mógł zrobić sobie dowolny stan opornikiem pullup lub pulldown.  Trzeba było o tym pomyśleć wcześniej i tak zaprojektować sprzęt by podciągał sobie pin do jedynki albo korzystał z aktywnego stanu wysokiego - tak czy tak jakiś opornik jest potrzebny. A zanim zaczniesz grzebać w sekcjach pomyśl ile w takim prostym programie trwa rozbiegówka zanim wywoła setup() - zero kropka nic. Albo może inaczej: rozpisz sobie ile trwają poszczególne etapy wstawania kodu Arduino:

  • Po narośnięciu zasilania reszta układów wokół procesora już działa - czas start. Procesor stoi w stanie RESET wymuszonym przez wewn BOR i/lub specjalny licznik- ten czas ustawiasz fusami, plus czas startu generatora. RC jest najszybszy a oscylator ceramiczny używany w Arduino - duużo wolniejszy.
  • Po wyjściu z zerowania rusza bootloader Arduino i sprawdza czy na uarcie jest jakaś komunikacja z PC - to mogą być setki milisekund.
  • Jeśli kontakt nie został nawiązany, bootloader startuje aplikację
  • Ta zaczyna od inicjalizacji swoich podstawowych rejestrów i zmiennych oraz zmiennych w obszarze data programu w C - to w małym procesorku trwa dziesiątki mikrosekund, nie ma o czym mówić.
  • Potem następuje wywołanie funkcji main() a ta na dzień dobry odpala setup() gdzie możesz ustawiać do woli swoje piny.

I na koniec pytanie za 100 punktów: gdzie jest największa oszczędność i czym trzeba zająć się w pierwszej kolejności? Odpowiedź - niczym z ww. Tak czy tak zawsze będzie szpilka i bez zmian sprzętowych się nie obejdzie.

 

  • Lubię! 1
Link do komentarza
Share on other sites

14 minut temu, marek1707 napisał:

Tak czy tak zawsze będzie szpilka i bez zmian sprzętowych się nie obejdzie.

Racja jak zwykle. Dolutować rezystor nawet do fabrycznie złożonej płytki to nie żadna sztuka bo programowo choćby zrobić najszybciej jak się da to i tak będzie za wolno, chyba, że wywalisz bootloader.

Link do komentarza
Share on other sites

@atMegaTona Nawet jak wywalisz bootloader to będzie wolno i pojawi się zaskakująco szeroka szpilka. Wbrew pozorom uruchomienie mikrokontrolera zajmuje sporo czasu, więc najlepiej sprzętowe problemy rozwiązywać sprzętowo. Jako ciekawostkę zachęcam do przetestowania / pomierzenia jaki jest czas od załączenia zasilania do  wykonania pierwszej instrukcji kodu. Też kiedyś myślałem, że program działa natychmiast 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Hmm. nie pamiętam czy piny porów przed włączeniem nie są w stanie wysokiej impedancji? Też jestem zwolennikiem rozwiązywania tego typu problemów sprzętowo tym bardziej, że rezystor nie jest jakoś nadzwyczajnie drogi a używany można wydłubać niemal ze wszystkiego 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Panowie z tym asemblerem to sobie daruję 😉 . Co do tego szybkiego digitalWriteFast -> faktycznie szybciej ustawia bo jak miga to nie tak cały czas szybko podczas włączania urządzenia jednak raz na jakiś czas widać na żarówce tą szpilkę . Instrukcje kolegi @atMegaTona , ustawiam i puszczam program i jeśli w setup() nie dam ustawień digitalWrite() oraz pinMode() to nie mam ustawionych tych pinów na wyjście więc albo ja coś źle robię albo metoda zawiodła. Co do ustawienia na początku digitalWrite a potem pinMode to jakoś nie widzę różnicy. Hardwarowo zbić szpilkę w jaki sposób ? podpinam przez rezystor i na nim taka szpilka nie zbija się różne wartości rezystorów dawałem ...

Powiem że nie spodziewałem się z tym takich problemów i mam mieszane teraz uczucia co do tych procków AVR. 

Link do komentarza
Share on other sites

16 minut temu, daniel89 napisał:

Co do ustawienia na początku digitalWrite a potem pinMode to jakoś nie widzę różnicy

W pierwszej chwili myślałem, że chodzi Ci o szpilkę która powstaje gdy najpierw zapiszesz do rejestru DDR kierunek OUTPUT a za chwilę do rejestru PORT stan wysoki. Wtedy na pewno powstaje impuls z twardym stanem zero, ale trwa on tyle ile w Arduino wykonuje się funkcja digitlWrite() więc jakieś mikrosekundy. Jeśłi masz problem z niezrozumieniem działania portów i w konsekwencji błędem na schemacie, to żadne takie zamienianie nie pomoże, bo stan niski wymuszony obciążeniem (przypominam, że wciąż nie widzieliśmy schematu) podłączonym do pinu liczysz teraz w setkach milisekund. Cóż, różne są znaczenia pojęcia "ułamek sekundy".

Jedynym wyjściem dla Ciebie jest schowanie dumy do kieszeni i wstawienie opornika podciągającego. Znajdź na PCB jakies miejsce gdzie ścieżka sygnału przechodzi blisko zasilania i w zależności od tego co masz podłączone weź kilka kΩ (1-22k) i podepnij od tego krytycznego pinu portu do Vcc procesora. Wtedy masz pewność, że od włączenia zasilania do zaprogramowania portu na wyjście w stanie 1 będziesz tam miał stan wysoki. Pewne cechy procesora warto znać wcześniej. W sumie to nie rozumiem dlaczego zakładałeś, że będzie tam fajna jedynka od samego początku. Rozumiem, gdyby to była diodka LED to może błysnąć i katastrofy nie ma, ale tak ważne wyjście w systemie i nie zastanowiłeś się jak zrobić to dobrze lub nie zapytałeś? Chociaż, w sumie mogło być jeszcze gorzej. Przecież mogłeś robić zapalnik do rakiety za milion dolarów... A procki jak procki. Żaden nie startuje w czasie zero mikrosekund a dodatkowo żadne zasilanie nie wstaje od zera w takim czasie. Na włąsnych błędach uczymy się najlepiej i teraz na pewno sekwencję startową Arduno zapamiętasz.

Link do komentarza
Share on other sites

(edytowany)

 Widać te szpilki?  Przy włączeniu zasilania do sieci powstają.  Dawałem rezystor i to nie pomagało chyba że źle podpisałem. 

P91202-201349.jpgimage.thumb.png.9c135de2d7c42b6492c4a5f07722a1b4.pngimage.thumb.png.ac06d6652925b1f0096fe2ff30ac2490.png

podpisane na Atmedze jest jako OUT i steruje przez rezystory i tranzystor załączając optotriaka . Mierzyłem na złączu SIG to już jest po tranzystorach i rezystorach na wejście załączajace tyrysory przez optotriaka. 

Jak to niby teraz hardwerowo zrobić by ta dioda w optotriaku nie błyskała przy włączaniu zasilania do sieci ? Jakiś kondensator czy co ?

Edytowano przez daniel89
Link do komentarza
Share on other sites

54 minuty temu, daniel89 napisał:

. Instrukcje kolegi @atMegaTona , ustawiam i puszczam program i jeśli w setup() nie dam ustawień digitalWrite() oraz pinMode() to nie mam ustawionych tych pinów na wyjście więc albo ja coś źle robię albo metoda zawiodła.

ja babola zrobiłem i nikt nie zwrócił uwagi być może ze względu na to, że nic nie przebije tego rezystora choćby cały Microchip na głowie stawał ;D

To jest wersja działająca i funkcjonalna, lepsza niż fast digidigi.. ale gorsza od rezystora.

static void init_ustawpin()
__attribute__ ((naked)) 
__attribute__ ((section (".init1"))) 
__attribute__ ((used));

void init_ustawpin(){
  DDRB |= _BV(PB1);
  PORTB |= _BV(PB1);
  asm volatile ("nop");
}

Trzeba to wstawić na samym początku pliku i oczywiście zmienić DDR, PORT i pin na właściwe. W sekcji O jest inicjalizowany zdaje się reset. Zmienne są inicjalizowane w dalszych sekcjach w sekcji 1 jeszcze nie są ustawione zmienne ale można wykonywać operacje na rejestrach.  Od sekcji 5 do 9 można już wpisywać co się chce w j. C  jakąś wstępną inicjalizację, która się wykona jeszcze przed załadowaniem frameworka arduino. To nie jest asembler tylko obsługa mikrokontrolera w j. C opierając się na rejestrach. Asemblerowy jest tu tylko "nop" (zbędny z resztą).

Poza tym z poziomu arduino jest swobodny dostęp do builtin avrlibc funkcji takich jak _delay_ms(), _delay_us() i wszystkich innych po zainkludowaniu właściwych nagłówków.

Przykład z microCore dla attiny13a, wstępna inicjalizacjia pinu PB1 na stan wysoki, inicjalizacja pinu PB0 dopiero w setuo(), Przełączanie stanu pinu PB0 za pomocą makr _ON i _OFF zamiast funkcji arduino digitalWrite().

// attiny13a


static void init_ustawpin()
__attribute__ ((naked)) 
__attribute__ ((section (".init1"))) 
__attribute__ ((used));

void init_ustawpin(){
  DDRB |= _BV(PB1);
  PORTB |= _BV(PB1);
  asm volatile ("nop");
}


#include <util/delay.h>

#define ON_ PORTB |= _BV(PB0);
#define OFF_ PORTB &= ~_BV(PB0);

void setup() {
   
  // put your setup code here, to run once:
  int a = 0;
  DDRB |= _BV(PB0);
  PORTB |= _BV(PB0);
}

void loop() {
  // put your main code here, to run repeatedly:
  OFF_;
  _delay_us(200);
  ON_
  _delay_us(200);
  a++;
}

 

A to wypluło mi na output arduinoIDE podczas kompilacji szkicu:

/home/johny/arduino-1.8.10/arduino-builder -dump-prefs -logger=machine -hardware /home/johny/arduino-1.8.10/hardware -hardware /home/johny/.arduino15/packages -tools /home/johny/arduino-1.8.10/tools-builder -tools /home/johny/arduino-1.8.10/hardware/tools/avr -tools /home/johny/.arduino15/packages -built-in-libraries /home/johny/arduino-1.8.10/libraries -libraries /home/johny/Arduino/libraries -fqbn=MicroCore:avr:attiny13:clock=9M6,BOD=disabled,lto=Os_flto -ide-version=10810 -build-path /tmp/arduino_build_375176 -warnings=none -build-cache /tmp/arduino_cache_319164 -prefs=build.warn_data_percentage=75 -verbose /home/johny/Arduino/WORKSPACE/microCore/tiny13/tiny13.ino
/home/johny/arduino-1.8.10/arduino-builder -compile -logger=machine -hardware /home/johny/arduino-1.8.10/hardware -hardware /home/johny/.arduino15/packages -tools /home/johny/arduino-1.8.10/tools-builder -tools /home/johny/arduino-1.8.10/hardware/tools/avr -tools /home/johny/.arduino15/packages -built-in-libraries /home/johny/arduino-1.8.10/libraries -libraries /home/johny/Arduino/libraries -fqbn=MicroCore:avr:attiny13:clock=9M6,BOD=disabled,lto=Os_flto -ide-version=10810 -build-path /tmp/arduino_build_375176 -warnings=none -build-cache /tmp/arduino_cache_319164 -prefs=build.warn_data_percentage=75 -verbose /home/johny/Arduino/WORKSPACE/microCore/tiny13/tiny13.ino
Using board 'attiny13' from platform in folder: /home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4
Using core 'microcore' from platform in folder: /home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4
Detecting libraries used...
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13a -DF_CPU=9600000L -DARDUINO=10810 -DARDUINO_attiny -DARDUINO_ARCH_AVR -Wextra -flto -g -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/cores/microcore -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/variants/attiny13 /tmp/arduino_build_375176/sketch/tiny13.ino.cpp -o /dev/null -D COMPILER_LTO
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13a -DF_CPU=9600000L -DARDUINO=10810 -DARDUINO_attiny -DARDUINO_ARCH_AVR -Wextra -flto -g -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/cores/microcore -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/variants/attiny13 /tmp/arduino_build_375176/sketch/set.c -o /dev/null -D COMPILER_LTO
Generating function prototypes...
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13a -DF_CPU=9600000L -DARDUINO=10810 -DARDUINO_attiny -DARDUINO_ARCH_AVR -Wextra -flto -g -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/cores/microcore -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/variants/attiny13 /tmp/arduino_build_375176/sketch/tiny13.ino.cpp -o /tmp/arduino_build_375176/preproc/ctags_target_for_gcc_minus_e.cpp -D COMPILER_LTO
/home/johny/arduino-1.8.10/tools-builder/ctags/5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_375176/preproc/ctags_target_for_gcc_minus_e.cpp
Kompilowanie szkicu...
Użycie wcześniej skompilowanego pliku: /tmp/arduino_build_375176/sketch/set.c.o
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=attiny13a -DF_CPU=9600000L -DARDUINO=10810 -DARDUINO_attiny -DARDUINO_ARCH_AVR -Wextra -flto -g -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/cores/microcore -I/home/johny/.arduino15/packages/MicroCore/hardware/avr/1.0.4/variants/attiny13 /tmp/arduino_build_375176/sketch/tiny13.ino.cpp -o /tmp/arduino_build_375176/sketch/tiny13.ino.cpp.o -D COMPILER_LTO
Compiling libraries...
Compiling core...
Using precompiled core: /tmp/arduino_cache_319164/core/core_MicroCore_avr_attiny13_clock_9M6,BOD_disabled,lto_Os_flto_c9015b997a1f219cbb36623297c313ac.a
Linking everything together...
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-gcc -w -Os -Wl,--gc-sections -mmcu=attiny13a -w -flto -g -o /tmp/arduino_build_375176/tiny13.ino.elf /tmp/arduino_build_375176/sketch/set.c.o /tmp/arduino_build_375176/sketch/tiny13.ino.cpp.o /tmp/arduino_build_375176/../arduino_cache_319164/core/core_MicroCore_avr_attiny13_clock_9M6,BOD_disabled,lto_Os_flto_c9015b997a1f219cbb36623297c313ac.a -L/tmp/arduino_build_375176 -lm
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 /tmp/arduino_build_375176/tiny13.ino.elf /tmp/arduino_build_375176/tiny13.ino.eep
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-objcopy -O ihex -R .eeprom /tmp/arduino_build_375176/tiny13.ino.elf /tmp/arduino_build_375176/tiny13.ino.hex
/home/johny/arduino-1.8.10/hardware/tools/avr/bin/avr-size -A /tmp/arduino_build_375176/tiny13.ino.elf
Szkic używa 132 bajtów (12%) pamięci programu. Maksimum to 1024 bajtów.
Zmienne globalne używają 5 bajtów (7%) pamięci dynamicznej, pozostawiając 59 bajtów dla zmiennych lokalnych. Maksimum to 64 bajtów.

 

Link do komentarza
Share on other sites

To może skupmy się na tym schemacie? Uściślijmy fakty a Ty popraw mnie jeśli masz połączone inaczej albo gdy inaczej rozumiesz schemat. Ja tam widzę procek zasilany z 5V i wyjście OUT sterujące tranzystorem pnp załączającym diodę optotriaka. Rzeczywiście, stan niski włącza tranzystor, ale masz tam przecież wszystko co trzeba: rezystor w bazie i rezystor od bazy do Vcc. Nie potrzebujesz żadnych podciągów i jeśli eksperymentowałeś z opornikiem to znaczy, że nie bardzo kumasz co tam jest narysowane. Czy to Twój schemat? Jak rozumiem - bo nie mamy opisu kabla łączącego oba schematy - pin X1-3 ma połączenie z pinem X2-1 i to jest sygnał dla anody diody a oprócz tego łączymy X1-2/9 z X2-2 (GND) oraz X1-6 z X2-3 (jakieś zasilanie,ale nie wiemy jakie).

No to zacznij od prostych pomiarów: ile napięcia jest na wejściu 7805 (woltomierz)? Ile na wyjściu? Potem pokaż na dwóch kanałach oscyloskopu jednocześnie: narastanie napięcia z wyjścia mostka i zasilanie procesora Vcc. Potem drugi obrazek: narastanie napięcia na mostku (czyli wejście 7805) i wyjście OUT procesora. Wszystko z podstawą czasu 10-20ms/dz, sprzężenie DC od wyjścia z mostka na poziomie ok. 2V. Poczekaj aż kondensatory się rozładują (może być kilkanaście sekund), podłącz oba kanały oscyloskopu ioczywiśxcie jego masę do GND układu i włącz wtyczkę do sieci. A wcześniej usuń z ekranu tę całą tabelkę z pomiarami - to do niczego nie jest potrzebne. Chcemy zobaczyć jak wygląda proces startu całości i jak zachowują się wtedy napięcia +5V i wyjście procesora. 

Do czego jest pin X1-1?

Czekamy na obrazki.

Link do komentarza
Share on other sites

(edytowany)

Dzięki @atMegaTona za poprawienie, wieczorem to sprawdzę. Możliwe że koledzy nie bardzo wiedzieli dlatego nie chcieli poprawiać. Mi samemu Ciężko to zrozumieć. Nie o to Ci chodziło co tutaj znalazłem z tymi init ? : https://www.eit.lth.se/fileadmin/eit/courses/edi021/avr-libc-user-manual/mem_sections.html . Tylko tutaj by procesor zinterpretował co to jest POTD, DDRD, jest dołączona biblioteka właśnie ta do AVR : #include <avr/io.h> . Nie wiem czy ten \ nie ma znaczenia w tym Twoim zapisie i brak tej biblitoeki , bo wcześniej też normalnie kompilowalo tylko nie wykonywało podciągnięcia na tym pinie - PD7.

@marek1707 ,  według schematu ja podłączam tylko te 3 piny do sterowania optotriakiem + zasilanie.  X2-3 z X1-1 ,    X2-2 z X1-2  oraz X2-1 z X1-3 . Napięcie zasilania jest stabilne jak widzisz na schemacie jest filtrowane kondensatorami po stabilizatorze lm7805. Tak jak poprzednio , dopiero wieczorem mogę co kolwiek pomierzyć dalej.  Układ zasilanie ma stabilne bo sprawdzałem jakość zasilania na oscyloskopie. W chwili załączenia nie sprawdzałem, ale skoro po czasie się to stabilizuje a procek wydobywa te przebiegi załączające optotriaka dlatego w programie szukałem tego problemu. Rezystory były - nie wiedziałem o jakie jeszcze rezysotry Ci chodziło - ten cudowny rezystor który miał poprawić jakość. Z tego co wiem to szpilki napięcia raczej filtruje się kondesnatorami nF , ale może się mylę. Dlatego pomierzę wszystko by było jasne ale jak mówię wieczorem.

Jeszcze jedno po dodaniu tej biblioteki do szybszego przełączania Fast , jak by żarówka mniej błyskała, może to coś wam rozjaśni.

P91201-132620.jpg

P91201-132559.jpg

Edytowano przez daniel89
Link do komentarza
Share on other sites

(edytowany)

Na tych pomiarach widać jakość zasilania ale to już w stanie ustalonym jest . Pierwsze takie delikatnie pływające to zasilanie +5V ,a to idealne +5V to po dławiku na AVCC.

Edytowano przez daniel89
Link do komentarza
Share on other sites

Chłopie, skup się. Nie kombinuj niczego z biliotekami tylko szukaj problemu w tym co jest. Dopiero gdy będziesz miał pewność gdzie leżą grabie, zaczniesz coś poprawiać. To nie łapanie pcheł tylko normalna procedura uruchmiania elektroniki. Żle że jej nie rozumiesz, ale dobrze, że zacząłeś zamiast wywalać układ do kosza "bo jakiś zły jest". Chodząc po omacku głównie ponabijasz sobie guzów. Miałeś zrobić pomiary bo poszukujesz pewnej anomalii a nie w celu udowodnienia sobie tezy, że wszystko jest dobrze. Chciałem byś pokazał (a przede wszystkim samemu zobaczył) jak wygląda narastanie wszystkich zasilań i stan wyjścia OUT bo to w tym momencie masz problem a nie gdy wszystko jest stabilne, czyż nie?. Oscyloskop jest teraz dla Ciebie nieocenionym narzędziem wsparcia a nie telewizorkiem do oglądania seriali. Zwyczajnie zrób to o co prosiłem, powtarzam jeszcze raz:

  • dwa kanały,
  • pierwszy podłączony do wejścia 7805  drugi do jego wyjścia, masa oscyloskopu do GND układu
  • obie sondy sprzężone DC, czułość kanałów: pierwszego 5V/dz (a jeśli się zmieści to i 2V/dz), drugiego 1V/dz
  • wyzwalanie NORMAL (nie AUTO), źródło triggera z kanału 1 (czyli z wejścia 7805), tryb sprzężenia DC, poziom ok. 2V,
  • podstawa czasu na 5, 10 lub 20ms/dz - w zależności od prędkości narastania napięć

I tak jak napisałem: upewniasz się że ustawiłeś wszystko jak powyżej, wyłączasz urządzenie, czekasz kilkanaście sekund, przygotowujesz oscyloskop i włączasz wtyczkę do sieci. Oscyloskop wyzwoli się raz i ten ekran nam pokaż. Gdyby sie okazało, że dostałeś więcej niż jeden skan przełączasz oscyloskop z NORMAL na tryb SINGLE, uzbrajasz go i powtarzasz całą próbę - musisz mieć pierwszy przebieg tylko z samego włączania i narastania napięć. Ew. zmieniasz podstawę czasu by było widać całość narastania. Punkt triggera ustaw gdzieś w 1/4 szerokości ekranu żeby więcej zmieściło się po jego prawej stronie.

A potem to samo, ale drugi kanał przełączony na pin OUT procesora. Na trzecim obraku możesz pokazać Vcc (pierwszy kanał) vs OUT (drugi kanał). 

Dopiero to da pogląd jak zachowują się zasilania i rzeczony pin w sytuacji krytycznej - to tam masz jakiś kłopot i jeśli tego nie obejrzysz, to cała reszta jest zgadywnaiem. Skorzystaj z drogiego sprzętu jakim dysponujesz tak jak na to zasługuje.

BTW: Wciąż nie wiemy jakie napięcie w stanie ustalonym oddaje mostek (nie masz woltomierza? naprawdę?) i jakie jest na wyjściu 7805. To takie trudne zmierzyć i napisać? Przecież to podstawowe pomiary w takim układzaie, konieczne do przeprowadzenia niezależnie od tego czy wszystko działa czy nie.  

  • Lubię! 2
Link do komentarza
Share on other sites

Mostek oddaje delikatnie ponad 5V DC widać to na przebiegu w oscyloskopie , nie muszę miernika podpinać innego typu woltomierz. Pomiary były robione nie w celu ustalenia błędu te pomiary robiłem jeszcze zanim ten błąd nie był wykryty, pokazałem tylko że zasilanie jest w porządku w stanie ustalonym - wiec czemu masz teraz do mnie jakieś pretensje ?

Wiem co muszę pomierzyć - wyjście z mikroprocesora OUT w stanie włączania układu - nieustalonym, oraz najlepije jeszcze na wyjściu z podciągnięcem do High Signal np. BUZZ. jeśli na wyściu BUZZ nie będzie przy stanie takiego piku to świadczy o tym że tranzystor NPN i odwrotne sterowanie załatwi sprawę bez kombinowania, tak to muszę kondensatorem kilka nF teraz wprowadzić inercję i patrzeć czy coś to zmienia - tyle hardwarowo mogę zrobić , inną kwestią jest by program sam z siebie nie siał przy przełączaniu - ale jak to zmierzę to dopiero uwierzysz ,że to wyjście mikroprocesora przełączane z LOW na HIGH tak sieje ?

Link do komentarza
Share on other sites

15 minut temu, daniel89 napisał:

Mostek oddaje delikatnie ponad 5V DC widać to na przebiegu w oscyloskopie , nie muszę miernika podpinać innego typu woltomierz. Pomiary były robione nie w celu ustalenia błędu te pomiary robiłem jeszcze zanim ten błąd nie był wykryty, pokazałem tylko że zasilanie jest w porządku w stanie ustalonym - wiec czemu masz teraz do mnie jakieś pretensje ?

To już jest bardzo źle i to może być przyczyną problemów a przynajmniej jest poważną poszlaką. Mostek ma dawać grubo powyżej 7V żeby 7805 miał w ogóle szansę działać. Masz za mały (w sensie napięcia) transformator.To co piszesz oznacza także, że nie rozumiesz tego co na oscyloskopie widzisz. Jeżeli na Vcc dostajesz choć minimalne zmiany/zapady/dołki poniżej 5V to znak, że na wejściu stabilizator ma za mało. To nie są pretensje, raczej irytacja. Prosiłem o wyniki pewnych pomiarów a Ty wrzucasz coś starego. Prosiłem o woltomierz a pokazujesz mi kreskę na oscyloskopie - to nie są te same narzędzia.

34 minuty temu, daniel89 napisał:

iem co muszę pomierzyć - wyjście z mikroprocesora OUT w stanie włączania układu - nieustalonym, oraz najlepije jeszcze na wyjściu z podciągnięcem do High Signal np. BUZZ. jeśli na wyściu BUZZ nie będzie przy stanie takiego piku to świadczy o tym że tranzystor NPN i odwrotne sterowanie załatwi sprawę bez kombinowania, tak to muszę kondensatorem kilka nF teraz wprowadzić inercję i patrzeć czy coś to zmienia - tyle hardwarowo mogę zrobić

Nie. Z definicji porty tych procesorów nie generują szpilek a my szukamy w którym miejscu Twój układ jest ułomny. Ani sterowanie zerem (optotriak) ani sterowanie jedynką (buzzer) nie są ani dobre ani złe. Ze schematu wynika, że obie linie mają odpowiednio zaprojektowane obwody by nie dawać żadnych stanów nieustalonych (ktoś miał o tym pojęcie, brawo, bo to rzadkość): pnp ma pullup  do Vcc a npn ma pulldown do masy. Tu wszystko jest w porządku. O ile Twój układ jest zmontowany jak na schemacie (wartości elementów i ich istnienie na PCB), to nie tu musisz szukać. Projekt elektryczny otoczenia procesora jest dobry. Osobiście podejrzewam, że dzieje się coś złego w momencie narastania napięcia z samym zasilaniem procesora. Prawdopodobnie nie narasta monotonicznie tylko impulsami tak jak dochodzą kolejne doładowania 100Hz z mostka: mając okresy wzrostów i zapadania się i to powoduje, że programu rusza jakby z czkawką - być może wielokrotnie, a spadki i wzrosty Vcc powodują od czasu do czasu wejście kodu w jakieś niepoprawne obszary i wyprodukowanie śmieci na portach. Także skup się na tej jednej chwili załączania i pokaż przebiegi. Dwa-trzy obrazki zrobione w odpowiednim momencie są warte dni spędzonych na kombinowaniu z programem i robieniu ślepych prób z kondensatorami, opóźnieniami czy co tam jeszcze wymyślisz. Chorego na gruźlicę nie leczy się przez zatkanie mu ust żeby nie kasłał tylko niszcząc bakterie antybiotykiem. Oczywiście może się zdarzyć, że wyjdzie iż kondensator jest (pomocniczym) rozwiązaniem, ale musisz to wiedzieć a nie zgadywać. Co do zasady: w dobrze zrobionym zasilaniu układu tych szpilek nie ma prawa być. Więc.. do roboty.

BTW: Jeśli rzeczywiście na wejściu 7805 ma <7V to od razu , w ciemno zmieniasz trafo na takie, które po wyprostowaniu daje min 8V lub odpalasz układ z zasilacza DC 9-12V zamiast z mostka. Oczywiście wszelkie pomiary o które prosiłem robisz na starej konfiguracji.

  • Lubię! 1
Link do komentarza
Share on other sites

4 godziny temu, daniel89 napisał:

Tylko tutaj by procesor zinterpretował co to jest POTD, DDRD, jest dołączona biblioteka właśnie ta do AVR : #include <avr/io.h> . Nie wiem czy ten \ nie ma znaczenia w tym Twoim zapisie i brak tej biblitoeki , bo wcześniej też normalnie kompilowalo tylko nie wykonywało podciągnięcia na tym pinie - PD7.

Ten plik nagłówkowy jest dołączany przez arduino niejawnie ale jest. Wcześniej optymalizator wywalił tą funkcję bo nie była nigdzie wywoływana __atribute__ ((used)) zapobiegło wywaleniu tej funkcji dlatego teraz działa.

32 minuty temu, daniel89 napisał:

wiec czemu masz teraz do mnie jakieś pretensje ?

Myślę, że to nie pretensje a chęć pomocy Ci w zrozumieniu pewnych kwestii. Myślę też, że nie pomylę się bardzo jeśli powiem, że możesz uważać Marka za profesora w tym temacie więc zamiast się oburzać polecam stosować się do wskazówek i cieszyć się, że w ogóle zechciał Ci pomóc. Jak to jest z profesorami to sam wiesz, jeden taki inny siaki ale jednak profesor, ten akurat tak ma - charakternik 😜 Konstruktywna krytyka mądrego motywuje.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.