МКФорумХвастаться и спрашивать сдесь

Собщество микроконтроллеров зазывает электронщиков! (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
19:55, 20 мая 2013

И наоборот, педантизм - требует точности. ))

#31
20:09, 20 мая 2013

В любом случае центр масс и центр тяжести - разные вещи.

#32
8:15, 21 мая 2013

bagnis
Чтобы платформа не раскачивалась, нужно мыслить немного в других категориях. Расчет такой - равновесие - это горизонтальное положение и нулевой момент качения платформы. Двигатели создают тягу-силу, при изменении тяги надо учитывать что система должна перейти в состояние равновесия и из этого рассчитывать время работы двигателя на повышенным оборотах. Т.е. нельзя ориентироваться только на гироскоп, нужно иметь представление о физической модели и характеристик платформы.

#33
11:17, 21 мая 2013

Стоят уже 9 лет работают часы с секундомером, будильником на МК-51, микроконтроллер AT89C2051. Писал сначала на asm, но потом все усложнилось, переписал на C. Интерфейс 2 кнопки, длинное нажатие или короткое - все разные функции.
Учитывается дребезг контактов, что-бы триггеры на плату не паять. Используется динамическая индикация, ключи для индикаторов - 4 транзистора КТ315, дешифратора для цифр нету, все делаться программно. Итого на плате
кренка, диодный мост, фильтрующий конденсатор, микроконтроллер, 4 транзистора, индикаторы. Несколько резюков, помехозащищающие конденсаторы, кварц.

#34
12:51, 21 мая 2013

выложите видео чтолие, или фотку покажите - интереснож.

#35
10:05, 22 мая 2013

фотка часов.
DSC_0003 | Собщество микроконтроллеров зазывает электронщиков!
Будут вопросы отвечу.

#36
16:43, 22 мая 2013

И вот вам ещё идея в копилку.
Недавно вот только, доделывая весы на ARM'е, с народом думали, чего ещё такого можно с ним запилить...
В итоге зачали идею самоуправляемого мяча.
Внутри смещаемый центр тяжести (там же и модуль управления и аккум), гироскопчик (кстати тут что-то про мобильные телефоны ради него говорили, но не упоминали отдельные и неплохие модули с ним), и всякое разное.
Мысль начиналась с того, чтобы мячик просчитывал и по возможности корректировал свои отскоки. Но постепенно переползли к мысли, чтобы он ещё и за тобой катился, пока ты до стадиона идёшь, например)))
На этом развитие мысли было прервано, но идея ещё теплится.
Может у вас будут какие-нибудь соображения...

#37
10:37, 23 мая 2013

Andrey
> фотка часов.
oh shi... :D

#38
16:01, 23 мая 2013

Andrey, клёвые. Какая точность? Примерно хотя бы. И что за кварц?

#39
17:16, 23 мая 2013

MoonStone
Кварц вроде 24 МГЦ. С точностью не помню. Я их подвожу на несколько секунд через какое-то время, установил это опытным путем. Не подвожу ни когда. Идут вполне точно :)
L
> oh shi... :D
а что такое?
А вот кстати сама прога. Писал почти 10 лет назад, так-что можно и попинать :)). Разработка была в Keil µVision.

#include<AT892051.H>

#define TEN              10
#define Number_of_Hours   24
#define Number_of_Minuts  60
#define Number_of_Seconds 60
#define TH              0x0C3
#define TL              0x50
#define Tic              13
#define Number_of_Tics1   33
#define Number_of_Tics2   130
#define Mode_Timers        2
#define Delay          255
#define Delta_Hours        10
#define Delta_Seconds    3

sbit Zummer               = P1^7;
sbit HG1              = P3^0;
sbit HG2                = P3^1;
sbit HG3                = P3^2;
sbit HG4                = P3^3;
sbit SB1                = P3^5;
sbit SB2                = P3^4;
sbit Point                = P3^7;

bit  Bit_Ring;            //For Zummer 
bit  Bit_Setup_Ring;      //For setup ring
bit  Bit_Setup_Cekundomer;
bit  Bit_Stop_Cekundomer;

typedef unsigned char byte;

byte code *Segment_Code[10]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};
byte data Register_Tics1;
byte data Register_Tics2;
byte data Register_Seconds;
byte data Register_Minuts;
byte data Register_Hours;  //; Регистер часов
byte data Count;
byte data Register_Button1;
byte data Register_Button2;
byte data Memory_Minuts;
byte data Memory_Hours;
byte data Memory_Correct_Hours;
byte data Memory_Seconds;         
byte data Memory_Stop_Seconds;    
byte data Memory_Cekundomer_Minuts;
byte data Memory_Stop_Minuts;
byte data Memory_Tics1;    
byte data Memory_Tics2;    
byte data x;

void Timer0(void) interrupt 1 using 0
{
   Register_Tics1++;
   if (Register_Tics1==Number_of_Tics1) {
      Register_Tics1=0;
      Register_Tics2++;
      if (Register_Tics2==Number_of_Tics2-90) 
         Point=1;
      if (Register_Tics2==Number_of_Tics2) { 
         Register_Tics2=0;
         Point=0;
         Register_Seconds++;
         if (Register_Seconds==Number_of_Seconds) {
            Register_Seconds=0;
            Register_Minuts++;
            if (Register_Minuts==Number_of_Minuts) {
               Register_Minuts=0;
               Register_Hours++;
               if (Register_Hours==Number_of_Hours) 
                  Register_Hours=0;
            }
         }
      } 
   }
   if (Bit_Setup_Cekundomer){
      if (!Bit_Stop_Cekundomer){       
          Memory_Tics1++;
         if (Memory_Tics1==Number_of_Tics1){
            Memory_Tics1=0;
            Memory_Tics2++;
            if (Memory_Tics2==Number_of_Tics2){
                Memory_Tics2=0;
                Memory_Seconds++;
                if (Memory_Seconds==Number_of_Seconds) {
                   Memory_Seconds=0;
                   Memory_Cekundomer_Minuts++;
                   if (Memory_Cekundomer_Minuts==Number_of_Minuts)
                       Memory_Cekundomer_Minuts=0;            
                }          
            } 
         }
      }
   if (Register_Hours-Memory_Correct_Hours==Delta_Hours && 
       Register_Seconds>=Number_of_Seconds-Delta_Seconds)
       Register_Seconds-=Delta_Seconds;
       Memory_Correct_Hours=Register_Hours;       
    }     
}

void Speaker()
{
   x=0;
   Zummer=1;
   while(x++<=55);
   Zummer=0;
   x=0;
   while(x++<=55);
}

void Timer1(void) interrupt 3 using 0
{
   TH1=TH;
   TL1=TL;
   if (!SB1) {  
      if (!SB2) {
         if (Bit_Setup_Cekundomer) 
            Bit_Setup_Cekundomer=0;
         else {       
            Bit_Setup_Cekundomer=1;
            Bit_Stop_Cekundomer=1;
          }
      }        
      if (Bit_Setup_Cekundomer) {    
         Memory_Seconds=0;
         Memory_Cekundomer_Minuts=0;
         Memory_Stop_Seconds=0;
         Memory_Cekundomer_Minuts=0;  
         Register_Button1=0;             
      } 
      Register_Button1++; 
      if (Register_Button1==1) Speaker();      
      if (Register_Button1==Delay){
         Register_Button1=0;
       if (!Bit_Setup_Ring) {
          Register_Minuts++;          
            if (Register_Minuts==Number_of_Minuts) 
               Register_Minuts=0;
       }else {
            Memory_Minuts++;
          if (Memory_Minuts==Number_of_Minuts) 
               Memory_Minuts=0;
        }
      }
   }
   if (!SB2) {
      if (!SB1){
        Register_Button1=0;
       Register_Button2=0;
      if (Bit_Setup_Ring) Bit_Setup_Ring=0; 
        else  Bit_Setup_Ring=1;           
      }    
      if (Bit_Setup_Cekundomer) {         
         Register_Button2=0;             
         Bit_Setup_Ring=0;
         if (Bit_Stop_Cekundomer) Bit_Stop_Cekundomer=0; 
         else {
             Memory_Stop_Seconds=Memory_Seconds;
             Memory_Stop_Minuts=Memory_Cekundomer_Minuts;
             Bit_Stop_Cekundomer=1; 
         }
      }     
      Register_Button2++;
      if (Register_Button2==1) Speaker();      
      if (Register_Button2==Delay) {
       Register_Button2=0;
         if (!Bit_Setup_Ring) {
          Register_Hours++;
            Memory_Correct_Hours=Register_Hours;   
            if (Register_Hours==Number_of_Hours)
             Register_Hours=0;
         }
         else {
          Memory_Hours++;
          if (Memory_Hours==Number_of_Hours) 
               Memory_Hours=0;
         } 
      }
   }  
   if (Register_Hours==Memory_Hours && Register_Minuts==Memory_Minuts) Speaker();
   if (Register_Minuts==Number_of_Minuts-1 && Register_Seconds==Number_of_Seconds-1 &&  
       Register_Tics2==Number_of_Tics2-1) 
       if (Bit_Ring) {
            Bit_Ring=0;
            Speaker();
       } else Bit_Ring=1;  
   Count++;
   switch (Count) {  
      case 1:{
          HG4=1;
        HG1=0;
        if (Bit_Setup_Cekundomer) {
             Bit_Setup_Ring=0; 
             if (!Bit_Stop_Cekundomer) x=Memory_Minuts/TEN;
             else  x=Memory_Stop_Minuts/TEN;
          } else x=Register_Hours/TEN;
          if (Bit_Setup_Ring)  x=Memory_Hours/TEN; 
        P1=*(Segment_Code+x);
        }
      break;
      case 2:{
          HG1=1;
        HG2=0;
          if (Bit_Setup_Cekundomer) {
             if (!Bit_Stop_Cekundomer) x=Memory_Cekundomer_Minuts%TEN;
             else  x=Memory_Stop_Minuts%TEN;  
             Point=1;
          } else  x=Register_Hours%TEN;                 
          if (Bit_Setup_Ring){
             x=Memory_Hours%TEN; 
             Point=0;
          }
           P1=*(Segment_Code+x);
        }
      break;
      case 3:{
          HG2=1;
        HG3=0;
        if (Bit_Setup_Cekundomer) {
             if (!Bit_Stop_Cekundomer) x=Memory_Seconds/TEN;
             else  x=Memory_Stop_Seconds/TEN;
           } else x=Register_Minuts/TEN;  
          if (Bit_Setup_Ring) x=Memory_Minuts/TEN;
        P1=*(Segment_Code+x);
       }
      break;
      case 4:{
          HG3=1;
        HG4=0;
          if (Bit_Setup_Cekundomer) { 
             if (!Bit_Stop_Cekundomer) x=Memory_Seconds%TEN;
             else  x=Memory_Stop_Seconds%TEN;
          } else x=Register_Minuts%TEN;
          if (Bit_Setup_Ring) x=Memory_Minuts%TEN;
        P1=*(Segment_Code+x);
        Count=0;
         }      
      break;
   }
}

void main(void)
{

   TH1=TH;
   TL1=TL;
   TH0=Tic;
   P1=*Segment_Code;
   P3=0x0F0;
   IP=2;
   IE=0x8A;
   TMOD=Mode_Timers;
   Register_Tics1=Register_Tics2=Register_Seconds=Register_Minuts=Register_Hours=0;
   while (SB1);
   TR1=1;
   TR0=1;
   while (1);
}
#40
17:17, 23 мая 2013

Andrey
даёшь статью!

#41
18:01, 23 мая 2013

О, Keil.. В нём же и весы клепали. Но сейчас товарищ переползает на Eclipse - говорит повеселее с ним. Хотя первое, чем удивил - споткнулся о файл с названием "0x0" :)

И чтобы уж без неопределённостей...
> "Я их подвожу на несколько секунд через какое-то время..." и "Не подвожу ни когда."
Какое предложение вернее? :)

#42
19:34, 23 мая 2013

Тёплый ламповый Keil.

У них ещё RTOS-ина прикольная

#43
23:47, 23 мая 2013

MoonStone
> > "Я их подвожу на несколько секунд через какое-то время..." и "Не подвожу ни
> > когда."
> Какое предложение вернее? :)
Ага, действительно не совсем точно написал. Короче
Часы вручную т.е. кнопками никода не подвожу, достигается это автоматической подводкой часов программно, в коде подвожу на несколько секунд через какое-то время. А вот и кусок кода:

#define Delta_Hours        10
#define Delta_Seconds    3
....
   if (Register_Hours-Memory_Correct_Hours==Delta_Hours && 
       Register_Seconds>=Number_of_Seconds-Delta_Seconds)
       Register_Seconds-=Delta_Seconds;
       Memory_Correct_Hours=Register_Hours;       
    } 

SashkuS
> даёшь статью!
Да ну! Устарело это все уже. Да и о чем писать все это есть в интернете. Я отошел уже от электроники хотя иногда бывает ностальгия...

#44
13:46, 12 ноя 2013

Нихера не умею, но всё-равно вступлю... Просто хочу, что-бы кто-нить, поделился опытом ARM... )))

З.Ы. обкатываю примитивный проц потипу древнего z80(на большее меня не хватило), но со стековой памятью (quadtree-stack), херню какую-то изобрёл, нет-бы стек и регистры как у всех нормальных людей... хотя вместе с байт-код интерпретатором будет работать гораздо быстрее, чем если бы память была регистровая =)

Страницы: 1 2 3 4 5 Следующая »
МКФорумХвастаться и спрашивать сдесь

Тема в архиве.