Escolar Documentos
Profissional Documentos
Cultura Documentos
● O modo SLEEP é quando os processadores estão em repouso e o DMA está inativo, por
isso pode desligar a maioria dos relógios do sistema.
● O modo DORMANT é quando você desliga todos os osciladores, e assim ainda tem
menos energia, mas então você tem menos opções para acordar".
● Dormant requer um gatilho externo que manipula um pino GPIO para acordar o
Raspberry Pi Pico, enquanto o SLEEP pode correr um relógio interno para acordar o
RP2040.
● Ele possui três canais conectados aos pinos GPIO: GP26, GP27 e GP28, que também
são conhecidos como GP26_ADC0, GP27_ADC1 e GP28_ADC2 para os canais
analógicos 0, 1 e 2.
● Há também um quarto canal ADC, que está conectado a um sensor de temperatura
incorporado ao RP2040.
● O GPIO29 pode ser usado para medir a tensão VSYS e existe também um último canal,
conectado a um sensor de temperatura interno da RP2040.
b) Qual a resolução do ADC? Como pode ser realizada a medição da temperatura interna do
processador usando o ADC?
● Um ADC tem duas características principais: sua resolução, medida em bits digitais, e
seus canais, ou quantos sinais analógicos ele pode aceitar e converter de uma vez.
● O ADC do Pico tem uma resolução de 12 bits, ou seja, ele pode transformar um sinal
analógico em um sinal digital como um número variando de 0 a 4095. Mas é importante
dizer que isso é tratado no MicroPython como um número de 16 bits variando de 0 a
65.535, para que funcione da mesma forma que o ADC em outros microcontroladores
MicroPython.
● De acordo com o Datasheet, O RTC interno do RP2040 pode ser usado para "acordar" o
processador de dois modos de economia de energia: modo Sleep (Sono) e modo
Dormant (Dormente). No modo Sleep, o RP2040 pode ser configurado para manter
apenas o clk_rtc (um relógio de referência RTC lento) em execução, juntamente com
uma pequena quantidade de lógica que permite que o processador acorde novamente.
O processador é acordado do modo Sleep quando a interrupção de alarme do RTC é
ativada.
● Para acordar o chip do modo Dormant, os seguintes passos devem ser seguidos:
1. Configurar o RTC para usar um relógio de referência externo (fornecido por um pino
GPIO).
2. Configurar o RTC para funcionar com a referência externa.
3. Se o processador estiver funcionando com o PLL, alterar para que ele funcione com o
XOSC/ROSC.
4. Desligar os PLLs.
5. Configurar o RTC com o horário desejado para acordar (única vez ou recorrente).
6. (opcionalmente) Desligar a maioria das memórias.
7. Invocar o modo Dormant (Dormente) de operação.
● Temp
import machine
import utime
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
while True:
reading = sensor_temp.read_u16() * conversion_factor
temperature = 27 - (reading - 0.706)/0.001721
print(temperature)
utime.sleep(1)
5 - Programar o RTC do RP2040 para gerar eventos a cada 10 segundos. Imprimir no shell
do Thonny a hora e a data correspondentes ao instante do evento.
R: Arquivo rtc.zip
● Rtc
def getRTC():
return rtc.datetime()
6 - Usando os resultados do item 4 e 5, elaborar um programa no Thonny para gravar um
arquivo na Flash da Raspberry Pi Pico contendo a temperatura do processador e a
hora/data associados. Realizar medições a cada 10 segundos durante 1 minuto. Abrir o
arquivo e avaliar se a informação registrada está correta.
R: Arquivo time&temp.zip
● Main
import temperature
import rtc
from time import sleep
Usando o picosleep do micropython, para dormir dentro de um loop. Isso iniciará seu pico,
ativando o led por 5 segundos e depois entre no estado de sono profundo e repetir até sleeptime
chegar a 10 segundos. Provando que podemos dormir profundamente do python e continuar a
execução do código.
import picosleep
import time
from machine import Pin
R: Não foi possível gerar uma interrupção via RTC no MicroPython, foi implementado um código
que acorda com uma interrupção via GPIO. Neste código, é configurado uma interrupção no
GPIO15 (a task que ele roda na interrupção não tem importancia, a implementação "pass", que
em Python é equivalente a um __NOP() - No operation, não funcionou, então foi implementado
apenas uma soma a uma variavel que não é usada). Assim, os 3 estados, ativo, sleep e domarnt
(utilizei um LED piscando para alertar a troca de estado), esperam a interrupção do GPIO15
para realizar a leitura da temperatura. É possivel ver na figura que não há diferença significativa
na temperatura nos 3 modos (arquivo lowpower.zip).
8 - Meça a corrente consumida pelo processador com um amperímetro e anote os valores
(alimente a placa pelo pino VSYS, em vez de utilizar o conector USB).
R: As medições foram as seguintes: modo acordado: 21mA, modo SLEEP: 19mA, modo
DORMANT: 0.7mA. Os resultados foram obtidos com um multímetro MD-1000A da empresa
ICEL Manaus, na escala de 200mA.
9 - Proponha uma forma de medir o consumo da placa em tempo real (mesmo que tenha
que usar outra placa para tal).
Um divisor resistivo, é um circuito que possui resistores em série, seu objetivo é diminuir a
tensão de entrada (Vin) de forma equilibrada com a soma das resistências de R1 e R2, com isso
é possível obter uma parcela deste valor, sendo a tensão de saída (Vout).
Neste contexto, onde conhecemos as tensões de Vin e Vout, é preciso descobrir quais são os
valores de R1 e R2 adequados ao circuito. Definindo o valor de R1 como 1KΩ podemos realizar
o cálculo para descobrir qual é a intensidade da corrente para a GPIO, onde U = 5V e R = 1,000.
Observado o resultado de 0,005A (5mA), está conforme o intervalo permitido das portas do
Raspberry, sendo possível aplicar o valor de R1 na fórmula do divisor de tensão para descobrir o
valor de R2.
Encontramos R2 = 1,94 KΩ, onde podemos adicionar no circuito um resistor de 2KΩ, ou dois
resistores de 1KΩ em série.
R: Utilizando dois ADCs ligados a divisores resistivos conectados a alimentação, junto de um
resistor shunt de 1 ohm em série com o dispositivo a ser medido a corrente, é possível descobrir
o valor de corrente a partir da diferença de tensão em cima do resistor shunt de 1 ohm (o valor
adquirido da diferença de tensão será equivalente a corrente). O arquivo corrente.zip contém um
print das leituras de corrente, 30, 28 e 8 mA em cada estado, além do main.py. É possível ver
que a leitura não é exata, provavelmente devido às imperfeições e tolerância dos resistores.
Demonstração Final.