ATtiny85 tiêu thụ gấp đôi dự kiến


9

Tôi đang cố gắng để có được một ATTiny85 để hết pin. Tôi có đồng hồ từ một tinh thể 16.384 MHz, với bộ cầu chì chia cho 8. Vcc là 3,3 volt. Hình 22-7 trong biểu dữ liệu nói rằng tại idle ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();), nó sẽ vẽ khoảng 300 PatrickA. Trong thực tế, tôi thấy nó vẽ giống 850 850A. Tôi không thể hiểu tại sao tiêu thụ năng lượng được dự kiến ​​gấp đôi. Tôi đã tắt mọi thứ trong PRR ngoại trừ timer0, mà tôi đã cấu hình để ngắt mỗi 25 ms. Vì vậy, nó nên dành phần lớn thời gian của nó ở trạng thái nhàn rỗi, đó là điều tốt nhất tôi có thể làm được vì tôi vẫn muốn bộ đếm thời gian được tính.

Các cầu chì là 0x7f, 0xdf, 0xff.

Đây là mã nó đang chạy cho thử nghiệm này:

#include <Arduino.h>
#include <EEPROM.h>
#include <avr/sleep.h>
#include <avr/power.h>

#define P0 0
#define P1 1
#define P_UNUSED 2

ISR(TIMER0_COMPA_vect) {
  // do nothing - just wake up
}

void setup() {
  power_adc_disable();
  power_usi_disable();
  power_timer1_disable();
  //PRR = _BV(PRADC) | _BV(PRTIM1) | _BV(PRUSI); // everything off but timer 0.
  TCCR0A = _BV(WGM01); // mode 2 - CTC
  TCCR0B = _BV(CS02) | _BV(CS00); // prescale = 1024
  // xtal freq = 16.384 MHz.
  // CPU freq = 16.384 MHz / 8 = 2.048 MHz
  // count freq = 2.048 MHz / 1024 = 2000 Hz
  OCR0A = 50; // 25 msec per irq
  TIMSK = _BV(OCIE0A); // OCR0A interrupt only.

  set_sleep_mode(SLEEP_MODE_IDLE);

  pinMode(P_UNUSED, INPUT_PULLUP);
  pinMode(P0, OUTPUT);
  pinMode(P1, OUTPUT);
  digitalWrite(P0, LOW);
  digitalWrite(P1, LOW);

  while(1) { sleep_mode(); }
}
void loop() {}

1
Bạn đã giết bộ so sánh?
Ignacio Vazquez-Abrams

1
Bạn đã xem qua một số mánh mà anh chàng jeelabs đã làm chưa? Xem tại đây (bắt đầu đọc ở phía dưới): jeelabs.org/tag/lowpower
RJR

1
@RJR Tôi đã xem, và thật không may, rất nhiều thủ thuật của họ sẽ không hoạt động vì tôi chỉ có thể sử dụng SLEEP_MODE_IDLE vì tôi cần duy trì hoạt động của bộ đếm thời gian. Ứng dụng này là một chiếc đồng hồ.
nsayer

1
Nếu đây là đồng hồ, tôi có thể đề nghị chạy bộ dao động bên trong và sử dụng tinh thể đồng hồ trên bộ đếm thời gian 2 để kích hoạt ngắt đồng hồ không? Sau đó bạn có thể sử dụng giấc ngủ sâu. Tôi nghĩ rằng có một bài viết trên blog của jeelabs về điều đó ở đâu đó quá.
RJR

1
Tất cả các googling tôi thấy cho thấy rằng họ đang sử dụng một mô-đun RTC bên ngoài. Nếu bạn có RTC, thì, vâng, bạn có thể sử dụng bộ giám sát và bộ dao động bên trong vì đồng hồ CPU không quan trọng. Trong trường hợp này, tuy nhiên, tôi muốn độ chính xác của tinh thể. Ngoài ra, đây là ATTiny85 - không có bộ định thời 2, chỉ 0 và 1 và bộ định thời 1 tiêu thụ nhiều năng lượng hơn so với bộ định thời 0. Tôi không biết làm thế nào bạn có thể kết nối một tinh thể với ATTiny mà không có bất kỳ thành phần bên ngoài nào khác ngoài đồng hồ hệ thống.
nsayer

Câu trả lời:


6

Bạn nói rằng theo Hình 22-7 trong biểu dữ liệu, nó chỉ nên vẽ 300, nhưng biểu đồ đó cho thấy bản vẽ hiện tại cho hoạt động mà không cần phân chia đồng hồ. Một bộ tạo dao động tinh thể chạy ở 16 MHz chắc chắn sẽ thu được nhiều dòng điện hơn một bộ chạy ở mức 2 MHz và bộ chia 3 giai đoạn sẽ thêm một chút nữa. Câu hỏi là - bao nhiêu nữa?

Bảng dữ liệu cũng gợi ý rằng dòng điện nhàn rỗi có thể được giảm bằng cách chia đồng hồ xuống, nhưng một lần nữa nó không cho biết nó sẽ giảm bao nhiêu . Ngoại suy đường dây 3.3V cho thấy rằng nó thường sẽ thu được khoảng 1,5mA ở mức 16,4 MHz và 850 LỰC là một mức giảm đáng kể - nhưng nó có nên ít hơn không?

Nếu bạn không thể sử dụng một tinh thể tần số thấp hơn trên bảng bạn đang đến thì có thể bạn không thể làm gì được. Tuy nhiên, trong khi bạn có mạch trên bảng mạch, ít nhất bạn có thể thử tinh thể 2 MHz, để xem đó có thực sự là vấn đề không.

nhập mô tả hình ảnh ở đây


Đồng ý. Tôi sẽ cắn. Tôi sẽ đến cửa hàng ngày hôm nay và lấy một tinh thể 2 MHz và tái sử dụng chip để không phân chia đồng hồ và kiểm tra nó.
nsayer

Một khó khăn khác là cần 2 ^ x tần số tinh thể. Tôi đã đi đến cửa hàng và tìm thấy một 4.096 MHz, nhưng 1.024 và 2.048 rất khó tìm. Nhưng việc không sử dụng đồng hồ 2 ^ x khiến bạn khó chọn được giá trị đặt trước và giá trị OCR0A dẫn đến phân số chẵn của một ngắt thứ hai. Nhưng nếu 8.192 MHz chia cho 16 tiết kiệm năng lượng đáng kể, tôi chắc chắn sẽ hài lòng với hơn 16.384 chia cho 32.
nsayer

2
Với một tinh thể 4.096 MHz tại chỗ và giá trị đặt trước của xung nhịp CPU là 8, giờ đây nó thu hút khoảng 450 PhaA.
nsayer

trễ vài năm, nhưng tại sao không mua RTC và sử dụng PPS, ngủ cứng bộ xử lý và nó chỉ bị gián đoạn.
HilarieAK

3

Tôi đã có một vấn đề tương tự với con chip đó. Điện năng tiêu thụ nhiều hơn 30% so với dự kiến.

Các vấn đề đã được sử dụng GPIO!

Chúng được cấu hình như đầu vào và để lại nổi. Việc thiếu trạng thái đầu vào được xác định rõ ràng đã khiến trình điều khiển GPIO tiêu thụ nhiều hơn những gì được chỉ định.

Câu trả lời là cho phép pull-up hoặc cấu hình các chân không sử dụng làm đầu ra.

Bạn có chắc chắn rằng các chân được đặt chính xác? Trong mã của bạn có vẻ như vậy, nhưng bạn đã kiểm tra?


Chà, chết tiệt. Nếu pinMode(P_UNUSED, INPUT_PULLUP);không đủ, thì WTF?
nsayer

Vâng, nhưng đôi khi điều này là không đủ. Chẳng hạn, bạn có thể có các chân là đầu vào ADC hoặc đầu vào tương tự theo mặc định, bất kể bạn lập trình theo hướng nào. Ở đó, trước tiên bạn phải vô hiệu hóa chức năng phụ. Đó là những gì tôi có nghĩa là "kiểm tra".
Blup1980

Đây là một ATTiny85. Có 6 chân, nhưng 3 trong số đó là RESET và hai chân xtal. Hai trong số đó là đầu ra và một là P_UNUSED. Toàn bộ ADC đã được tắt nguồn rõ ràng. Tôi sẽ thử mẹo INPUT_PULLUP trên 3 chân còn lại, nhưng tôi nghi ngờ nó sẽ không thay đổi gì cả. Có một lỗi cho Tiny45 nói về việc không đặt các chân xtal thành OUTPUT vì tiêu thụ điện năng.
nsayer

Thêm pinMode(3, INPUT_PULLUP);và tương tự cho 4 và 5 không làm gì cả.
nsayer

1

Tôi muốn thêm rằng đối với một dự án riêng biệt, tôi đã hỏi câu hỏi này và câu trả lời cũng ảnh hưởng đáng kể đến câu hỏi này. việc xóa sạch ADCSRAđã đưa mức tiêu thụ nhàn rỗi xuống mức mà hình 22-6 nói rằng nó phải thực hiện - khoảng 100 LờiA với tốc độ xung nhịp hệ thống chia là 500 kHz - và đó là tần số xung nhịp sau chia, không phải tần số tinh thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.