Add simple screen
This commit is contained in:
parent
fad56304e2
commit
a4204239a0
61
Cargo.lock
generated
61
Cargo.lock
generated
@ -50,12 +50,24 @@ dependencies = [
|
||||
"unwrap-infallible",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "az"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973"
|
||||
|
||||
[[package]]
|
||||
name = "bare-metal"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.3"
|
||||
@ -68,6 +80,16 @@ version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
|
||||
|
||||
[[package]]
|
||||
name = "embedded-graphics-core"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba9ecd261f991856250d2207f6d8376946cd9f412a2165d3b75bc87a0bc7a044"
|
||||
dependencies = [
|
||||
"az",
|
||||
"byteorder",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-hal"
|
||||
version = "0.2.7"
|
||||
@ -100,6 +122,37 @@ version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "723dce4e9f25b6e6c5f35628e144794e5b459216ed7da97b7c4b66cdb3fa82ca"
|
||||
|
||||
[[package]]
|
||||
name = "hash32"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heapless"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
|
||||
dependencies = [
|
||||
"hash32",
|
||||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mipidsi"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ba34dcbf61182ffa6992b5a4d9b566d5a99df127fd93f6d314213347329e92f"
|
||||
dependencies = [
|
||||
"embedded-graphics-core",
|
||||
"embedded-hal 1.0.0",
|
||||
"heapless",
|
||||
"nb 1.1.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nb"
|
||||
version = "0.1.3"
|
||||
@ -145,6 +198,12 @@ dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "stable_deref_trait"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
@ -162,7 +221,9 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"atmega-hal",
|
||||
"avr-device",
|
||||
"embedded-graphics-core",
|
||||
"embedded-hal 1.0.0",
|
||||
"mipidsi",
|
||||
"panic-halt",
|
||||
"ufmt",
|
||||
]
|
||||
|
@ -5,11 +5,13 @@ edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
panic-halt = "1.0.0"
|
||||
avr-device = { version = "0.7", features = ["rt"] }
|
||||
embedded-hal = "1.0"
|
||||
avr-device = { version = "*", features = ["rt"] }
|
||||
embedded-hal = "1.0.0"
|
||||
atmega-hal = { git = "https://github.com/Rahix/avr-hal?tab=readme-ov-file", rev="cd3edea", version = "0.1.0", features=["atmega328p"] }
|
||||
|
||||
ufmt = "0.2.0"
|
||||
mipidsi = "0.9.0"
|
||||
embedded-graphics-core = "0.4.0"
|
||||
# nb = "1.1.0"
|
||||
# pwm-pca9685 = "1.0.0"
|
||||
# infrared = "0.14.1"
|
||||
|
133
src/main.rs
133
src/main.rs
@ -4,40 +4,71 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use atmega_hal::{Usart, usart::Baudrate};
|
||||
use embedded_hal::delay::DelayNs;
|
||||
use core::convert::Infallible;
|
||||
|
||||
use atmega_hal::{
|
||||
Spi, Usart,
|
||||
prelude::_embedded_hal_blocking_spi_Write,
|
||||
spi::{self, Settings},
|
||||
usart::Baudrate,
|
||||
};
|
||||
use embedded_graphics_core::{
|
||||
draw_target::DrawTarget,
|
||||
pixelcolor::Rgb565,
|
||||
prelude::{Point, RgbColor, Size},
|
||||
primitives::Rectangle,
|
||||
};
|
||||
use embedded_hal::spi::{Operation, SpiBus};
|
||||
use embedded_hal::{delay::DelayNs, spi::ErrorType, spi::SpiDevice};
|
||||
use panic_halt as _;
|
||||
|
||||
type CoreClock = atmega_hal::clock::MHz8;
|
||||
|
||||
struct Device<T: DelayNs> {
|
||||
spi: Spi,
|
||||
delay: T,
|
||||
}
|
||||
|
||||
impl<T: DelayNs> embedded_hal::spi::ErrorType for Device<T> {
|
||||
type Error = Infallible;
|
||||
}
|
||||
|
||||
impl<T: DelayNs> embedded_hal::spi::SpiDevice for Device<T> {
|
||||
fn transaction(
|
||||
&mut self,
|
||||
operations: &mut [embedded_hal::spi::Operation<'_, u8>],
|
||||
) -> Result<(), Self::Error> {
|
||||
for op in operations {
|
||||
match op {
|
||||
Operation::Read(items) => {
|
||||
self.spi.read(*items)?;
|
||||
}
|
||||
Operation::Write(items) => {
|
||||
SpiBus::write(&mut self.spi, *items)?;
|
||||
}
|
||||
Operation::Transfer(read, write) => {
|
||||
self.spi.transfer(read, write)?;
|
||||
}
|
||||
Operation::TransferInPlace(items) => {
|
||||
self.spi.transfer_in_place(items)?;
|
||||
}
|
||||
Operation::DelayNs(time) => {
|
||||
self.delay.delay_ns(*time);
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[avr_device::entry]
|
||||
fn main() -> ! {
|
||||
let dp = atmega_hal::Peripherals::take().unwrap();
|
||||
let pins = atmega_hal::pins!(dp);
|
||||
|
||||
let a0 = pins.pc0;
|
||||
let a1 = pins.pc1;
|
||||
let a2 = pins.pc2;
|
||||
let a3 = pins.pc3;
|
||||
|
||||
let mosi = pins.pb3;
|
||||
let miso = pins.pb4;
|
||||
let sck = pins.pb5;
|
||||
|
||||
let rx = pins.pd0;
|
||||
let tx = pins.pd1;
|
||||
let d2 = pins.pd2;
|
||||
let d3 = pins.pd3;
|
||||
let d4 = pins.pd4;
|
||||
let d5 = pins.pd5;
|
||||
let d6 = pins.pd6;
|
||||
let d7 = pins.pd7;
|
||||
let d9 = pins.pb1;
|
||||
let d10 = pins.pb2;
|
||||
|
||||
let mut led = pins.pb0.into_output();
|
||||
led.set_high();
|
||||
let mut delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
||||
let mut serial = Usart::new(
|
||||
dp.USART0,
|
||||
rx,
|
||||
@ -45,9 +76,63 @@ fn main() -> ! {
|
||||
Baudrate::<CoreClock>::new(57600),
|
||||
);
|
||||
|
||||
let (mut spi, mut cs) = spi::Spi::new(
|
||||
dp.SPI,
|
||||
pins.pb5.into_output(),
|
||||
pins.pb3.into_output(),
|
||||
pins.pb4.into_pull_up_input(),
|
||||
pins.pb2.into_output(),
|
||||
Settings {
|
||||
data_order: spi::DataOrder::MostSignificantFirst,
|
||||
clock: spi::SerialClockRate::OscfOver2,
|
||||
mode: embedded_hal::spi::Mode {
|
||||
polarity: embedded_hal::spi::Polarity::IdleHigh,
|
||||
phase: embedded_hal::spi::Phase::CaptureOnFirstTransition,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
// Create a buffer
|
||||
let mut buffer = [0_u8; 512];
|
||||
let di = mipidsi::interface::SpiInterface::new(
|
||||
Device {
|
||||
spi,
|
||||
delay: atmega_hal::delay::Delay::<CoreClock>::new(),
|
||||
},
|
||||
pins.pb1.into_output(),
|
||||
&mut buffer,
|
||||
);
|
||||
|
||||
let mut builder_delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
||||
let mut display = mipidsi::Builder::new(mipidsi::models::ST7789, di)
|
||||
.reset_pin(pins.pd7.into_output())
|
||||
.init(&mut builder_delay)
|
||||
.unwrap();
|
||||
|
||||
display.clear(Rgb565::GREEN).unwrap();
|
||||
|
||||
let mut delay = atmega_hal::delay::Delay::<CoreClock>::new();
|
||||
let mut color = 0;
|
||||
loop {
|
||||
led.toggle();
|
||||
display
|
||||
.clear(Rgb565::new(color % 255, color % 40, color % 100))
|
||||
.unwrap();
|
||||
display
|
||||
.fill_solid(
|
||||
&Rectangle {
|
||||
top_left: Point { x: 50, y: 50 },
|
||||
size: Size {
|
||||
width: 100,
|
||||
height: 100,
|
||||
},
|
||||
},
|
||||
Rgb565::RED,
|
||||
)
|
||||
.unwrap();
|
||||
color += 40;
|
||||
// inner_led.toggle();
|
||||
// other_led.toggle();
|
||||
delay.delay_ms(1000);
|
||||
ufmt::uwriteln!(&mut serial, "Hello from ATmega!\r").unwrap();
|
||||
ufmt::uwriteln!(&mut serial, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA").unwrap();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user