www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 05 Дек 2023, 12:29

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 8 мнения ] 
Автор Съобщение
 Заглавие: bit banging
МнениеПубликувано на: 21 Авг 2023, 10:52 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Задача: съвсем прост тест на скоростта на превключване на извод при различни микроконтролери.
в основния цикъл: извод LOW, извод HIGH ...

Скоростта зависи от начина на управление. Ще пробвам по няколко начина.
---
Arduino Nano, ATmega328, 16 MHz
Код за потвърждение:
void setup() {
  pinMode(10, OUTPUT);
}

void loop() {
  digitalWrite(10, HIGH);
  digitalWrite(10, LOW);
}

резултат:
pin 2 : 147,200 kHz
pin 5 : 116,900 kHz
pin 10: 114,100 kHz
pin A0: 147,200 kHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 21 Авг 2023, 11:02 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
Arduino Nano, ATmega328, 16 MHz
Код за потвърждение:
void setup() {
  DDRB |= 0b00000100;  // output pin 10
}

void loop() {
  PORTB = 0b00000000; // pin 10 -> LOW
  PORTB = 0b00000100; // pin 10 -> HIGH
}

резултат:
pin 10: 2,650000 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 21 Авг 2023, 11:34 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
PIC16F1503, INT 16 MHz
Код за потвърждение:
#use delay(internal = 16000000)
#use STANDARD_IO(A_outputs = PIN_A5)

void main() {
  while (TRUE) {
    output_low(PIN_A5);
    output_high(PIN_A5);
  }
}

резултат:
PIN_A5 : 401,100 kHz
---
Код за потвърждение:
#use delay(internal = 16000000)

#byte TRISA = 0x08C    // TRISA
#byte PORTA = 0x00C    // PORTA
#bit RA5 = 0x00C.5     // RA5

void main() {
  TRISA = 0b11011111;  // RA5 -> output

  while (TRUE) {
    RA5 = 1;
    RA5 = 0;
  }
}

резултат:
PIN_A5: 1,002700 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 22 Авг 2023, 14:35 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
ATtiny13A през MicroCore, INT 9,6 MHz
Код за потвърждение:
void setup() {
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(4, HIGH);
  digitalWrite(4, LOW);
}

резултат:
PB4 : 1,585500 MHz
---
Код за потвърждение:
void setup() {
  DDRB = 0b00010000;
}

void loop() {
  PORTB = 0b00000000;
  PORTB = 0b00010000;
}

резултат:
PB4 : 2,455200 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 23 Авг 2023, 21:38 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
ATmega1609, INT 16 MHz
Код за потвърждение:
void setup() {
  pinMode(26, OUTPUT);
}

void loop() {
  digitalWrite(26, HIGH); // PD4
  digitalWrite(26, LOW);  // PD4
}

резултат:
PD4 (pin 24) : 409,120 kHz
---
Код за потвърждение:
void setup() {
  PORTD.DIRSET = 0b00010000;  // output PD4
}

void loop() {
  PORTD.OUTCLR = 0b00010000;  // PD4 = 0
  PORTD.OUTSET = 0b00010000;  // PD4 = 1
}

или
Код за потвърждение:
void setup() {
  PORTD.DIRSET = 0b00010000;  // output PD4
}
void loop() {
  PORTD.OUT = 0b00000000;  // PD4 = 0
  PORTD.OUT = 0b00010000;  // PD4 = 1
}

резултат:
PD4 (pin 24) : 2,002400 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 24 Авг 2023, 09:58 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
PIC24F16KA102, INT 16 MHz
Код за потвърждение:
#use delay(internal = 16000000)
#use FIXED_IO(B_outputs = PIN_B5)

void main() {
  while (TRUE) {
    output_low(PIN_B5);
    output_high(PIN_B5);
  }
}

резултат:
PB5 (pin 14) : 1,001500 MHz
---
Код за потвърждение:
#use delay(internal = 16000000)

#byte TRISB = 0x02C8   // TRISB
#byte PORTB = 0x02CA   // PORTB
#bit RB5 = 0x02CA.5    // RB5

void main() {
  TRISB = 0b1111111111011111;  // PB5 output
 
  while (TRUE) {
    RB5 = 1;
    RB5 = 0;
  }
}

резултат:
PB5 (pin 14) : 2,002500 MHz


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 05 Сеп 2023, 01:22 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
STM32G030F6P6, INT 16 MHz, PA3
Код за потвърждение:
   // 171.666 kHz
   // HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
   // HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

   // 797.902 kHz
   // GPIOA -> ODR ^= (1 << 3);  // toggling pin PA3

   // 886.553 kHz
   // GPIOA -> ODR |= 1 << 3;     // set pin PA3
   // GPIOA -> ODR &= ~(1 << 3);  // reset pin PA3

   // 840.050 kHz
   // GPIOA -> BSRR |= (1 << 3);   // set pin PA3
   // GPIOA -> BSRR |= (1 << 19);  // reset pin PA3

Друга идея?


Върнете се в началото
 Профил  
 
 Заглавие: Re: bit banging
МнениеПубликувано на: 23 Сеп 2023, 23:43 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1447
Местоположение: Силистра
STM32F103C8T6, INT 16 MHz, PC13
Код за потвърждение:
    // 694.378 kHz
    // HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
    // HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

    // 887.306 kHz
    // GPIOC -> ODR |= 1 << 13;     // set pin PC13
    // GPIOC -> ODR &= ~(1 << 13);  // reset pin PC13

    // 887.306 kHz
    // GPIOC -> BSRR |= (1 << 13);  // set pin PC13
    // GPIOC -> BSRR |= (1 << 29);  // reset pin PC13

    // 3.194204 MHz
    // GPIOC->BSRR = GPIO_BRR_BR13;  // set pin PC13
    // GPIOC->BRR = GPIO_BRR_BR13;   // reset pin PC13


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 8 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
cron
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com